1. 업데이트 다음에

import java.util.*;
import java.io.*;
/**
* https://www.acmicpc.net/problem/2641
* BOJ 백준온라인져지 2641 다각형그리기 풀이
*/
public class Main {
private static String str1[];
public static void main (String args[]) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
str1 = br.readLine().split(" ");
int K = Integer.parseInt(br.readLine());
ArrayList<String> result = new ArrayList<>();
for (int i = 0; i < K; i++) {
String str = br.readLine();
String str2[] = str.split(" ");
for (int z = 0; z < N; z++) {
if (isEqual(str2)) {
result.add(str);
break;
} else {
String temp[] = new String[str2.length];
for (int j = 1; j < str2.length; j++) {
temp[j - 1] = str2[j];
}
temp[str2.length - 1] = str2[0];
str2 = temp;
}
}
String temp1[] = new String[str2.length];
for (int j = 0; j < str2.length; j++) {
str2[j] = String.valueOf((Integer.parseInt(str2[j]) + 1) % 4 + 1);
temp1[str2.length - j - 1] = str2[j];
}
str2 = temp1;
for (int z = 0; z < N; z++) {
if (isEqual(str2)) {
result.add(str);
break;
} else {
String temp[] = new String[str2.length];
for (int j = 1; j < str2.length; j++) {
temp[j - 1] = str2[j];
}
temp[str2.length - 1] = str2[0];
str2 = temp;
}
}
}
bw.write(String.valueOf(result.size()));
bw.write("\n");
for (int i = 0; i < result.size(); i++) {
bw.write(result.get(i));
bw.write("\n");
}
bw.flush();
}
private static boolean isEqual (String str2[]) {
for (int i = 0; i < str1.length; i++) {
if (!str2[i].equals(str1[i])) return false;
}
return true;
}
}
view raw Main.java hosted with ❤ by GitHub

문제

모눈종이에 다각형을 그리려고 한다. 그리는 방법은 모양수열로 표시된다. 모양수열은 1과 4사이의 숫자가 연속되어 나열된 것으로 1은 오른쪽으로, 2는 위쪽으로, 3은 왼쪽으로, 4는 아래쪽으로 한 칸씩 그리는 것을 말한다.

예를 들어 아래 그림의 다각형 (2)는 점 A에서 시작하여 화살표 방향으로 모양수열 1411433322를 따라서 그린 것이다. 다각형 (3)은 점 B에서 시작하여 화살표 방향으로 모양수열 3221411433을 따라서 그린 것이다. 또한 다각형(4)는 점 C에서 시작하여 화살표 방향으로 모양수열 4411123323을 따라서 그린 것이다. 다각형 (2), (3), (4)는 다각형 (1)과 같으므로 모양수열들 1411433322, 3221411433, 4411123323은 모두 같은 다각형을 그릴 수 있다. 단, 다각형이 회전된 것이나 뒤집어진 것은 같은 다각형이 아니다. 그러므로 아래 그림의 다각형 (5)와 (6)은 다각형 (1)과 다르다.

한 개의 표본 모양수열과 여러 모양수열들이 주어졌을 때 표본 모양수열과 같은 다각형을 그릴 수 있는 모양수열들을 모두 찾는 프로그램을 작성하시오.

입력

첫째 줄에는 표본 모양수열의 길이(숫자의 개수)가 주어지고, 둘째 줄에는 표본 모양수열이 주어진다. 셋째 줄에는 모양수열의 개수가 주어지고 넷째 줄부터는 각 줄에 표본 모양수열과 같은 길이의 모양수열이 하나씩 주어진다. 단, 모양수열들의 개수는 최대 100 개이고 모양수열의 길이는 최대 50 이다. 모양수열의 각 숫자 사이에는 빈칸이 하나 있다.

출력

첫째 줄에는 입력된 표본 모양수열과 같은 다각형을 그리는 모양수열들의 개수를 출력한다. 둘째 줄부터는 각 줄에 표본 모양수열과 같은 다각형을 그릴 수 있는 모양수열을 출력한다. 출력되는 모양수열의 숫자들은 한 칸 띄고 출력한다.


+ Recent posts