본문 바로가기

머리맞대는이야기/백준

[1074] Z

반응형

출처: www.acmicpc.net/problem/1074

 

1074번: Z

한수는 2차원 배열 (항상 2^N * 2^N 크기이다)을 Z모양으로 탐색하려고 한다. 예를 들어, 2*2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. 만약, 2차원 ��

www.acmicpc.net

풀이과정

1. 작은 단위부터 세어 나가면 될 것이라 생각하는데 좌표 처리를 어떻게 해야할까...

2. N 부터 N제곱 최대 단위까지 카운팅한다.

 


풀이코드

package Test;

import java.util.*;
import java.io.*;

public class MainNew {

	public static int N, X, Y, result = 0;
	// y: 가로 , x: 세로
	public static void solve(int n, int x, int y) {
		// 4등분 되지 않는 케이스에서 덧셈 처리 (2^1 인 경우)
		if (n == 2) {
			// Z 방향 처리 중에 구하는 좌표 있으면 함수 종료
			if (x == X && y == Y) {
				System.out.println(result);
				return;
			}
			result++;
			if (x == X && y + 1 == Y) {
				System.out.println(result);
				return;
			}
			result++;
			if (x + 1 == X && y == Y) {
				System.out.println(result);
				return;
			}
			result++;
			if (x + 1 == X && y + 1 == Y) {
				System.out.println(result);
				return;
			}
			result++;
			return;
		}
		solve(n / 2, x, y);
		solve(n / 2, x, y + n / 2);
		solve(n / 2, x + n / 2, y);
		solve(n / 2, x + n / 2, y + n / 2);
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		N = sc.nextInt();
		X = sc.nextInt();
		Y = sc.nextInt();
		
		solve((int) Math.pow(2, N), 0, 0);
	}

} // MainNew

 

memo

재귀 + x,y 좌표 고려하는 문제...

2시간동안 봤으나 결국 나동빈 깃헙 코드를 참조하였다..

재귀는 이제 조금은 알 것 같다.

 

반응형

'머리맞대는이야기 > 백준' 카테고리의 다른 글

[1966] 프린터 큐  (0) 2020.10.05
[7490] 0 만들기  (0) 2020.10.04
[2747] 피보나치 수  (0) 2020.10.03
[1939] 중량제한  (0) 2020.09.30
[1991] 트리순회  (0) 2020.09.30