728x90
설명
민식이는 다음과 같은 폴리오미노 2개를 무한개만큼 가지고 있다. AAAA와 BB
이제 '.'와 'X'로 이루어진 보드판이 주어졌을 때, 민식이는 겹침없이 'X'를 모두 폴리오미노로 덮으려고 한다. 이때, '.'는 폴리오미노로 덮으면 안 된다.
폴리오미노로 모두 덮은 보드판을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 보드판이 주어진다. 보드판의 크기는 최대 50이다.
출력
첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.
예시 입력1
XXXXXX
예시 출력1
AAAABB
예시 입력2
XX.XX
예시 출력2
BB.BB
풀이
로직은 단순하다.
사전순으로 가장 앞서는 답을 출력하라고 했으므로, AAAA로 바뀌는 과정이 BB로 바뀌는 과정보다 우선되어야 한다.
1) XXXX가 포함되어 있지 않을 때 까지 XXXX를 AAAA로 바꾸고
2) XX가 포함되어 있지 않을 때 까지 XX를 BB로 바꾸고
3) X가 남아있다면 X를 모두 폴리오미노로 덮을 수 없는 것이므로 -1을 리턴하면 된다.
String 클래스의 replace(String target, String replacement) 메소드를 사용하면 쉽게 구현할 수 있다.
코드
package baekjoon._1343;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static String solution(String str) {
while(str.contains("XXXX")) {
str = str.replace("XXXX", "AAAA");
}
while(str.contains("XX")) {
str = str.replace("XX", "BB");
}
if (str.contains("X")) return String.valueOf(-1);
else return str;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
String str = br.readLine();
bw.write(sb.append(solution(str)).toString());
bw.flush();
bw.close();
br.close();
}
}
728x90
'Baekjoon' 카테고리의 다른 글
[백준/자바] 18258번 큐 2 (1) | 2024.04.26 |
---|---|
[백준/자바] 11899번 괄호 끼워넣기 (0) | 2024.04.14 |
[백준/자바] 16953번 A → B (0) | 2024.03.27 |
[백준/자바] 14916번 거스름돈 (0) | 2024.03.27 |
[백준/자바] 1946번 신입 사원 (1) | 2024.03.26 |