

-Code
import java.io.*;
import java.util.*;
public class BOJ2641 {
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
int length = Integer.parseInt(br.readLine());
// 비교할 셈플 받기
StringTokenizer st = new StringTokenizer(br.readLine());
StringBuilder originSampleSb = new StringBuilder();
StringBuilder reverseSampleSb = new StringBuilder();
for (int i = 0; i < length; i++) {
char move = st.nextToken().charAt(0);
originSampleSb.append(move);
// 반대 순서도 저장 (1 -> 3, 2 -> 4, 3 -> 1, 4 -> 2)
reverseSampleSb.append(reverseMove(move));
}
// 시작 위치에 따른 움직이는 순서를 찾기 쉽게하기 위해 * 2
String originSample = originSampleSb.toString().repeat(2);
// 반대 순서로 가므로 역방향으로 하고 * 2 저장
String reverseSample = reverseSampleSb.reverse().toString().repeat(2);
// 다음 표본수 검사
int sampleCnt = Integer.parseInt(br.readLine());
int answer = 0;
ArrayList<String> sameSample = new ArrayList<>();
for (int i = 0; i < sampleCnt; i++) {
st = new StringTokenizer(br.readLine());
// 빅교할 셈플 받기
StringBuilder inputSample = new StringBuilder();
for (int j = 0; j < length; j++) {
inputSample.append(Integer.parseInt(st.nextToken()));
}
// 역방향과 정방향 둘 중 하나라도 같은 모양 만들어지면 저장 및 갯수 증가
if (originSample.contains(inputSample) || reverseSample.contains(inputSample)) {
answer++;
sameSample.add(inputSample.toString());
}
}
// 출력
StringBuilder sb = new StringBuilder();
sb.append(answer).append("\n");
for (String line : sameSample) {
for (char dir : line.toCharArray()) {
sb.append(dir).append(" ");
}
sb.append("\n");
}
System.out.println(sb);
}
// 반대 방향으로 변경
private static char reverseMove(char move) {
switch (move) {
case '1': return '3';
case '2': return '4';
case '3': return '1';
default: return '2';
}
}
}
처음에 정렬한 2개의 샘플이 같은 경우 같은 모양이 나오는 것으로 생각을 해서 그렇게 했으나 틀렸습니다. 그래서 잘 못 이해한 건지 찾아보니 시작점에 따른 정방향 이동해여 만들어지는 모양과 역방향으로 이동하여 만들어지는 모양을 계산해야 했습니다.
그래서 좀 더 편하게 하기 위해 String의 contains를 사용하고 이를 위해 정방향과 역방향 문자열을 2배의 길이로 확장하고 역방향인 경우 각 1은 3, 2는 4와 같이 변경하고 역방향으로 돌려서 2배 확장하여 만들었습니다. 그리고 이 문자열에 입력받은 샘플로 contains를 하여 해결했습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 4201번 Snakes and Ladders (0) | 2026.02.14 |
|---|---|
| [백준/Java] 2303번 숫자 게임 (0) | 2026.02.13 |
| [백준/Java] 35071번 Circular Shortcut (0) | 2026.02.13 |
| [백준/Java] 2302번 극장 좌석 (0) | 2026.02.12 |
| [백준/Java] 24610번 Who Goes There? (0) | 2026.02.12 |