본문 바로가기

코딩테스트/JAVA

[백준 JAVA] 20187번: 종이접기

https://www.acmicpc.net/problem/20187

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	public static int k, h, N, curCnt, mode;
	public static char RR, CR;
	public static int[][] map;
	public static int[][] curMap = { { 0, 1, 2, 3 }, { 1, 0, 3, 2 }, { 2, 3, 0, 1 }, { 3, 2, 1, 0 } };

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		// 1. 입력받기
		k = Integer.parseInt(br.readLine());
		N = (int) Math.pow(2, k);
		map = new int[N][N];

		// 1-1. 접는방법 입력
		st = new StringTokenizer(br.readLine());
		for (int i = 0; i < k * 2; i++) {
			String s = st.nextToken();
			char c = s.charAt(0);

			if (c == 'R' || c == 'L') {
				RR = c;
			} else {
				CR = c;
			}
		}

		// 1-2. 구멍 뚫는 위치 입력
		h = Integer.parseInt(br.readLine());
		
		// 1-3. 어느 위치에 구멍을 뚫는지 저장
		if (RR == 'R' && CR == 'D') {
			curCnt = 3;
		} else if (RR == 'R' && CR == 'U') {
			curCnt = 1;
		} else if (RR == 'L' && CR == 'D') {
			curCnt = 2;
		} else if (RR == 'L' && CR == 'U') {
			curCnt = 0;
		}

		// 2. 복사할 맵 유형 찾기
		for (int i = 0; i < 4; i++) {
			if (curMap[i][curCnt] == h)
				mode = i;
		}
		
		// 2-1. 맵 복사
		for (int i = 0; i < N; i+=2) {
			for (int j = 0; j < N; j+=2) {
				map[i][j] = curMap[mode][0];
				map[i][j + 1] = curMap[mode][1];
				map[i + 1][j] = curMap[mode][2];
				map[i + 1][j + 1] = curMap[mode][3];
			}
		}

		// 3. 출력
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N; j++) {
				System.out.print(map[i][j] + " ");
			}
			System.out.println();
		}

	}
}

 

 

풀이 사항
풀이 일자: 2024.09.02
풀이 시간: 60분 00초
채점 결과: 정답
예상 문제 유형: 구현

 

풀이 방법

1. 2^k x 2^k 만큼의 map을 만들어주고 마지막에 접는 x축, y축 접는 방법을 기억해 둔다. (예, RD, LU)

 

2. 각각의 경우에 대해 어느 구역에 구멍을 뚫는지 위치를 저장해준다. 왼쪽 위 부터 뚫는 방법 그대로이다. 

 

3. 복사할 맵 유형이 4가지인데 아까 뚫었던 구역과 구멍번호가 일치하는 유형을 찾아준다.

 

4. 맵의 크기만큼 복사해준다. 

 

어떤식인지 그림을 통해 좀 더 자세히 설명하려고 한다.

 

k가 아무리 크게 주어져도 종이의 모양은 총 4가지 모양의 반복일 수 밬에 없다. 모양은 다음과 같다.