728x90
반응형

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

 

1074번: Z

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

www.acmicpc.net

 

 

이 문제는 2차원 배열에 수를 다 채운 다음에 r행 c열에 접근하려고하면 바로 메모리 초과 에러가 난다,,~

배열을 안쓰고 계산하는 알고리즘을 생각해내서 풀어야함..~

 

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

public class Main {
    public static int[][] map = {{0,1},{2,3}};
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int r = Integer.parseInt(st.nextToken());
        int c = Integer.parseInt(st.nextToken());
        int size = (int)Math.pow(2,n);
        rec(r,c,size,0);
    }
    public static void rec(int r, int c, int len, int num){
        if(len>2) {
            len /= 2;
            if (r >= len && c >= len) // 3사분면
                rec(r % len, c % len, len, num+len*len*3);
            else if (r >= len && c < len) //2사분면
                rec(r % len, c, len, num+len*len*2);
            else if (r < len && c >= len) //4사분면
                rec(r, c % len, len, num+len*len*1);
            else // 1사분면
                rec(r, c, len, num);
        }
        else{
            System.out.println(map[r][c]+num);
        }
    }
}
728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기