728x90
반응형
2024.08.31기준 - 실버5
728x90
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
이 문제는 방향과 2x2격자가 주어질 때 일치하는 점프 계열이 있다면 점프 계열 이름을 아니라면 ?를 출력하는 문제입니다.
이 문제를 접근할 때 2x2 격자를 1차원 배열로 표현하여 접근을 했습니다.
1. 기술 이름과 기술 마다 들어와야 하는 문자열을 정리했습니다.
// 해당 방향에서 바로보는 기준으로 문자열을 저장.
// 바라볼 때 1열 왼쪽, 1열 오른쪽, 2열 왼쪽, 2열 오른쪽
String[] name = {"T", "F", "Lz"};
char[] T = { '.', 'O', 'P', '.' };
char[] F = { 'I', '.', '.', 'P' };
char[] Lz = { 'O', '.', '.', 'P' };
boolean[] check = new boolean[3];
현재 저장된 문자열들은 바라보는 방향을 기준으로 밑에 사진과 같은 번호의 순서에 맞게 정리되어 저장했습니다.
2. 2x2 격자이기 때문에 입력은 무조건 2줄 밖에 오지 않습니다. 그래서 입력을 동시에 받아 처리를 해주었습니다.
// 2x2의 격자이기 때문에 2개를 동시에 입력 받는다.
char[] j = new char[4];
char[] u = br.readLine().toCharArray();
char[] d = br.readLine().toCharArray();
switch (dir) {
case "E": // 동쪽이라면
j[0] = d[0];
j[1] = u[0];
j[2] = d[1];
j[3] = u[1];
break;
case "W": // 서쪽이라면
j[0] = u[1];
j[1] = d[1];
j[2] = u[0];
j[3] = d[0];
break;
case "S": // 남쪽이라면
j[0] = u[0];
j[1] = u[1];
j[2] = d[0];
j[3] = d[1];
break;
case "N": // 북쪽이라면
j[0] = d[1];
j[1] = d[0];
j[2] = u[1];
j[3] = u[0];
break;
}
3. 방향에 맞게 입력된 배열을 이용해 각각의 점프 계열마다 같은지 체크를 진행합니다.
// 각각의 점프 계열마다 체크
for (int i = 0; i < 4; i++) {
if (!check[0] && j[i] != T[i]) {
check[0] = true;
}
if (!check[1] && j[i] != F[i]) {
check[1] = true;
}
if (!check[2] && j[i] != Lz[i]) {
check[2] = true;
}
}
4. 일치하는 점프 계열이 있다면 점프 계열 이름을 아니라면 ?를 출력해줍니다.
// 일치하는 점프가 있다면 출력.
for (int i = 0; i < 3; i++) {
if (!check[i]) {
sb.append(name[i]);
break;
}
}
// 일치하는 점프가 없다면 ?를 출력.
if (sb.length() == 0) {
sb.append("?");
}
코드
package Main;
import java.io.*;
import java.util.*;
public class Main {
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();
String dir = br.readLine(); // 진행 방향, EWSN, 동서남북
// 해당 방향에서 바로보는 기준으로 문자열을 저장.
// 바라볼 때 1열 왼쪽, 1열 오른쪽, 2열 왼쪽, 2열 오른쪽
String[] name = {"T", "F", "Lz"};
char[] T = { '.', 'O', 'P', '.' };
char[] F = { 'I', '.', '.', 'P' };
char[] Lz = { 'O', '.', '.', 'P' };
boolean[] check = new boolean[3];
// 2x2의 격자이기 때문에 2개를 동시에 입력 받는다.
char[] j = new char[4];
char[] u = br.readLine().toCharArray();
char[] d = br.readLine().toCharArray();
switch (dir) {
case "E": // 동쪽이라면
j[0] = d[0];
j[1] = u[0];
j[2] = d[1];
j[3] = u[1];
break;
case "W": // 서쪽이라면
j[0] = u[1];
j[1] = d[1];
j[2] = u[0];
j[3] = d[0];
break;
case "S": // 남쪽이라면
j[0] = u[0];
j[1] = u[1];
j[2] = d[0];
j[3] = d[1];
break;
case "N": // 북쪽이라면
j[0] = d[1];
j[1] = d[0];
j[2] = u[1];
j[3] = u[0];
break;
}
// 각각의 점프 계열마다 체크
for (int i = 0; i < 4; i++) {
if (!check[0] && j[i] != T[i]) {
check[0] = true;
}
if (!check[1] && j[i] != F[i]) {
check[1] = true;
}
if (!check[2] && j[i] != Lz[i]) {
check[2] = true;
}
}
// 일치하는 점프가 있다면 출력.
for (int i = 0; i < 3; i++) {
if (!check[i]) {
sb.append(name[i]);
break;
}
}
// 일치하는 점프가 없다면 ?를 출력.
if (sb.length() == 0) {
sb.append("?");
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
}
728x90
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BEAKJOON / 백준 - JAVA 9342번 염색체 (0) | 2024.09.02 |
---|---|
BEAKJOON / 백준 - JAVA 17484번 진우의 달 여행 (Small) (6) | 2024.09.01 |
BEAKJOON / 백준 - JAVA 14494번 다이나믹이 뭐예요? (0) | 2024.08.30 |
BEAKJOON / 백준 - JAVA 19572번 가뭄(Small) (0) | 2024.08.30 |
BEAKJOON / 백준 - JAVA 25562번 차의 개수 (0) | 2024.08.29 |