🌞Algorithm/🔥Baekjoon

[Baekjoon] 4921_나무 블록

뿌야._. 2024. 8. 1. 22:03
문제(출처: 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