기록하는 개발자

[백준 1343번] 폴리오미노 - JAVA 알고리즘 본문

Baekjoon Online Judge

[백준 1343번] 폴리오미노 - JAVA 알고리즘

gitseok 2022. 6. 14. 17:05

1343번
문제
민식이는 다음과 같은 폴리오미노 2개를 무한개만큼 가지고 있다. AAAA와 BB
이제 '.'와 'X'로 이루어진 보드판이 주어졌을 때, 민식이는 겹침없이 'X'를 모두 폴리오미노로 덮으려고 한다. 이때, '.'는 폴리오미노로 덮으면 안 된다.
폴리오미노로 모두 덮은 보드판을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 보드판이 주어진다. 보드판의 크기는 최대 50이다.
출력
첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.
예제 입력 예제 출력
   
XX.XXXXXXXXXX..XXXXXXXX...XXXXXX BB.AAAAAAAABB..AAAAAAAA...AAAABB

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.text.ParseException;

public class Main {

	public static void main(String[] args) throws IOException, ParseException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 선언
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); // 선언

		String str = br.readLine();
		String check = "true";
		int leng = 0;
		String[] strArr = str.split("\\.", -1); // 공백도 포함하기 위해서 -1 추가
		for (int i = 0; i < strArr.length; i++) { // 홀수 체크
			if (strArr[i].length() % 2 != 0) {
				check = "false"; // 변환불가
				break;
			}
		}

		if (check == "true") { //배열이 짝수로 이루어져있을시
			for (int i = 0; i < strArr.length; i++) { //구분마다 진행
				leng = strArr[i].length();
                
				while (true) { 
					if (leng >= 4) { //4칸이상이면 AAAA출력
						bw.write("AAAA");
						leng = leng - 4;
					} else if (leng >= 2) { //2칸이상 BB출력
						bw.write("BB");
						leng = leng - 2;
					} else { //이외 종료
						break;
					}
				}
				if (i < strArr.length - 1) {
					bw.write("."); //마지막을 제외하고 .출력
				}

			}
		} else {
			bw.write("-1"); //변환 불가능하다면
		}

		bw.close();
		br.close();
	}
}

더보기

.split을 사용할때 구분자 뒤에 -1를 넣어주면 뒤에 남은 공백도 포함시킨다.

개인적으로 정리한 내용을 간단하게 풀어 작성했습니다.
이해가 안가는 부분은 댓글 남겨주시면 설명해드리겠습니다.
Comments