본문 바로가기

백준

Z - 1074번 (Java)

728x90

http://boj.kr/1074

 

1074번: Z

한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. 만약, N > 1이 라서

www.acmicpc.net

package a0817;

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

public class Main_BOJ_Z_서울_12반_이서영 {
	
	static int n,r,c;
	static int order =0;
	static int answer =-1;
	
	public static void search(int tn, int x, int y) {
		
		if(answer!=-1) {return;}
		
		if(x==r && y==c) {  //만약 x가 r이고 y가 c라면
			answer = order;	//몇번째인지 저장
			return;
		}
	
	if(x<=r && r<x+tn && y<=c && c<y+tn) { //r이 x와 x+tn 사이에 , y가 c와 c+tn 사이에 있는 경우에만 분할을 해서 접근한다.
		search(tn/2,x,y); //위왼 사각형
		search(tn/2,x,y+tn/2); //위오 사각형
		search(tn/2,x+tn/2,y); // 아래왼 사각형
		search(tn/2,x+tn/2,y+tn/2); // 아래오 사각형

	}
	else {
		order= order+(tn*tn); //tn*tn개수 만큼 지나왔다.
	}
	}
	
	
	
	public static void main(String args[]) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st =new StringTokenizer(br.readLine());
		n = Integer.parseInt(st.nextToken());
		r = Integer.parseInt(st.nextToken());
		c = Integer.parseInt(st.nextToken());
		int tn = 2<<n; //2의 n승

		search(tn,0,0);
		System.out.println(answer);
	}
	
}

'백준' 카테고리의 다른 글

쿼드트리-1992번 (Java)  (0) 2021.08.22
이중우선순위큐  (0) 2021.04.05
찾기 - KMP 알고리즘  (0) 2021.04.02
인구이동  (0) 2021.01.25