시뻘건 개발 도전기

[1343번] 폴리오미노 본문

Business logic/백준

[1343번] 폴리오미노

시뻘건볼때기 2020. 4. 22. 23:01
반응형

문제 기출 : [https://www.acmicpc.net/problem/1343]

 

 

풀이 방법

[그리디알고리즘] 접근

받은 문자열에서 사전식 정렬을 위해 "AAAA"부터 replace를 한 다음 "BB"로 replace를한다.

만약 "X"가 남아있다면 불가능 하므로 -1 출력, "X"가 없다면 정답이 될 것이다.

아주아주아주 허무할 정도로 간단하다...

 

 

나는 무려 3시간 가량을 낭비했다...

다음과 같은 헛짓거리(?)를 할 수 있는 문제.

1. 사전식 정렬이 필요할 것 같아 보임

2. 4의 배수와 2의 배수를 생각할 수도 있음

3. 홀수와 짝수를 나눌 생각을 할 수 있음

4. "."을 기준으로 나열된 X에 대해 탐색할 가능성이 있음

5. etc

 

심지어 엄청난 런타임 에러때문에 식은땀을 흘렸다...

그러나 아직도 왜 런타임  에러가 뿜뿜했는지 정말 모르겠다.....ㅠㅠ

런타임 에러 뿜뿜

 

문제 풀이

public class Main {
	public static void main(String[] args) {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String answer = "";
		try {
			String board = br.readLine();
			
			board = board.replaceAll("XXXX", "AAAA");
			board = board.replaceAll("XX", "BB");
						
			if(board.indexOf("X") > -1) {
				System.out.println(-1);
			} else {
				System.out.println(board);
			}

		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

 

헛짓거리한 코드와 런타임 에러로 식은 땀을 냈던 풀이

public class Main {
	public static void main(String[] args) {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String answer = "";
		try {
			String board = br.readLine();
			// 바로 헛짓거리 시작
			String[] XBundle = board.split("\\.");
			int i = 0;

			// 헛짓거리의 정점
			for (i = 0; i < XBundle.length; i++) {
				if(XBundle[i].isEmpty()) {
					XBundle[i] = ".";
				} else {
					if(XBundle[i].length() % 2 == 1) {
						System.out.println(-1);
						return;
					}
					
					XBundle[i] = XBundle[i].replaceAll("XXXX", "AAAA");
					XBundle[i] = XBundle[i].replaceAll("XX", "BB");
					XBundle[i] = XBundle[i].concat(".");
				}
			}

			i--;
			XBundle[i] = XBundle[i].substring(0, XBundle[i].length()-1);
			for (String str : XBundle) {
				answer = answer.concat(str);
			}
			
			for (i = board.length() - 1; i >= 0; i--) {
				if(board.charAt(i) == '.') {
					answer = answer.concat(".");
				} else {
					return;
				}
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			System.out.println(answer); // 이녀석을 실행하면 런타임 에러...
			// 오죽하면 finally 구문에다가 빼기 까지 했겠나 싶다...ㅠㅠ
			try {
				br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
반응형

'Business logic > 백준' 카테고리의 다른 글

[2828번] 사과 담기 게임  (0) 2020.04.23
[2875번] 대회 or 인턴  (0) 2020.04.23
[1543번] 문서검색  (0) 2020.04.19
[2437번] 저울  (0) 2020.04.19
[2529번] 부등호  (0) 2020.04.16
Comments