문제(출처: https://www.acmicpc.net/problem/4921)
< 나무 블록 >
문제 풀이
각 블록의 오른쪽에 올 수 있는 블록인지 판단한다.
1, 3 -> 4, 5
2 -> x
4, 6 -> 2, 3
5, 7 -> 8
8 -> 6, 7
my solution (Java)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class _4921_ { // 나무 블록
	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		String str = "";
		int idx = 1;
		while (!(str = bf.readLine()).equals("0")) {
			boolean flag = false;
			for (int i = 0; i < str.length() - 1; i++) {
				if (str.charAt(0) != '1' || str.charAt(str.length() - 1) != '2') {
					flag = true;
					break;
				}
				if (str.charAt(i) == '1' || str.charAt(i) == '3') {
					if (str.charAt(i + 1) == '4' || str.charAt(i + 1) == '5') {
						continue;
					} else {
						flag = true;
						break;
					}
				} else if (str.charAt(i) == '2') {
					flag = true;
					break;
				} else if (str.charAt(i) == '4' || str.charAt(i) == '6') {
					if (str.charAt(i + 1) == '2' || str.charAt(i + 1) == '3') {
						continue;
					} else {
						flag = true;
						break;
					}
				} else if (str.charAt(i) == '5' || str.charAt(i) == '7') {
					if (str.charAt(i + 1) == '8') {
						continue;
					} else {
						flag = true;
						break;
					}
				} else if (str.charAt(i) == '8') {
					if (str.charAt(i + 1) == '6' || str.charAt(i + 1) == '7') {
						continue;
					} else {
						flag = true;
						break;
					}
				}
			}
			if (str.length() == 1) {
				flag = true;
			}
			if (flag) {
				bw.write(idx + ". NOT\n");
			} else {
				bw.write(idx + ". VALID\n");
			}
			idx++;
		}
		bw.flush();
	}
}변수)
str : 조각 정보
idx : 테스트 케이스 번호
flag : 배치 올바른지 여부
입력으로 0이 들어올 때까지 다음 과정을 반복한다.
1) 입력받은 조각 탐색
2) 맨 앞과 맨 뒤가 1번과 2번이 아니라면 올바른 배치가 아니므로 종료
3) 1, 3 -> 4, 5 / 2 -> x / 4, 6 -> 2, 3 / 5, 7 -> 8 / 8 -> 6, 7 조건에 맞지 않다면 올바른 배치가 아니므로 종료
4) 만약 입력받은 조각의 개수가 1개라면 올바른 배치가 아니므로 종료
올바른 배치라면 VALID를, 올바른 배치가 아니라면 NOT을 출력한다.

'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글
| [Baekjoon] 2304_창고 다각형 (0) | 2024.08.05 | 
|---|---|
| [Baekjoon] 2508_사탕 박사 고창영 (0) | 2024.08.02 | 
| [Baekjoon] 5619_세 번째 (0) | 2024.07.30 | 
| [Baekjoon] 10799_쇠막대기 (0) | 2024.07.26 | 
| [Baekjoon] 15705_단어 찾기 (1) | 2024.07.25 |