Problem Solving/Baekjoon
[백준] 4921 나무 블록 - Data Structure / Java
graycode
2023. 6. 25. 15:24
• 문제 링크
4921번: 나무 블록
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄에 하나씩 주어진다. 각 조각은 문제의 그림에 나와있는 숫자로 주어진다. 숫자는 공백없이 주어진다. 적어도 1개의
www.acmicpc.net
• 풀이 과정
• 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;
public class Main {
static Map<Character, char[][]> map;
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();
init();
String input;
int seq = 1;
while (!(input = br.readLine()).equals("0")) {
if (isValid(input)) sb.append(seq++).append(". VALID\n");
else sb.append(seq++).append(". NOT\n");
}
bw.write(sb.toString());
bw.flush();
}
private static boolean isValid(String s) {
int len = s.length() - 1;
if (s.charAt(0) != '1' || s.charAt(len) != '2') return false;
for (int i = 1; i < len; i++)
if (!validate(s.charAt(i), s.charAt(i - 1), s.charAt(i + 1))) return false;
return true;
}
private static boolean validate(char key, char prev, char next) {
char[][] pairs = map.get(key);
if (pairs == null) return false;
for (char[] pair : pairs)
if (pair[0] == prev && pair[1] == next) return true;
return false;
}
private static void init() {
map = new HashMap<>();
map.put('3', new char[][]{{'4', '4'}, {'4', '5'}, {'6', '4'}, {'6', '5'}});
map.put('4', new char[][]{{'1', '2'}, {'1', '3'}, {'3', '2'}, {'3', '3'}});
map.put('5', new char[][]{{'1', '8'}, {'3', '8'}});
map.put('6', new char[][]{{'8', '2'}, {'8', '3'}});
map.put('7', new char[][]{{'8', '8'}});
map.put('8', new char[][]{{'5', '6'}, {'5', '7'}, {'7', '6'}, {'7', '7'}});
}
}