알고리즘/백준

99클럽 코테 스터디 17일차 TIL 백준 Z -자바(Java)

리콜 2024. 4. 15. 21:16

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

 

1074번: Z

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

www.acmicpc.net

 

99클럽 스터디의 카톡방 추천으로 풀게 되었다.

 

처음에는 배열로 관리하려했으나 그냥 숫자로 카운트 하면 될것 같아 배열을 생성하지 않고 만들었다.

 

재귀 호출을 사용하여 4등분한뒤 좌표의 위치를 확인하여 쪼개며 재귀를 하였다.

 

처음에 코드를 작성하고 이상하게 안되어 확인해 확인해보니

문제의 목표가 

 

r행 c열을 몇 번째로 방문했는지 출력한다.

 

여서 n번째 n열을 몇번째인줄 알았다.

그래서 1이상의 수라 생각했는데

 

제한
  • 1 ≤ N ≤ 15
  • 0 ≤ r, c < 2N

조건을 자세히 보니 n은 1이상이지만 

r과 c는 0부터 였다...

 

그 뒤 코드를 완성한줄 알았는데 예시 테스트 케이스를 넣어도 잘 되는데 제출을 하면 실패가 떴었다.

왜그런지 한참 못찾다가 마지막 오른쪽 밑 검사를 r과 c를 바꾸어 넣었던 것을 발견 했다.;;

-inSize를 하면서 잘못 타이핑 한 것 같다...

 

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

public class Main {
    public static int count = 0;

    public static void main(String[] args) throws IOException {
        //n > 1 일경우 4등분한후에 재귀적으로

        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());

        recursion((int)Math.pow(2, n), r, c);


    }
    public static void recursion(int depth, int r , int c){
        if(depth == 1){
            System.out.println(count);
            return;
        }
        int inSize = depth/2;
        if(inSize > r && inSize > c) {//4등분에서 왼쪽
            recursion(inSize, r,c);
        }
        else if(inSize > r && inSize <= c) {//4등분에서 오른쪽
            count += inSize*inSize ;
            recursion(inSize, r, c - inSize);
        }
        else if(inSize <= r && inSize > c) {//4등분에서 왼쪽 밑에
            count += inSize*inSize * 2;
            recursion(inSize, r - inSize, c );
        }
        else if(inSize <= r && inSize <= c) {//4등분에서 오른쪽 밑에
            count += inSize*inSize * 3;
            recursion(inSize,r -inSize, c - inSize);
        }

    }



}

 

반응형

'알고리즘 > 백준' 카테고리의 다른 글

백준 1926 번 그림 -자바(Java)  (0) 2024.05.10
백준 2178번 미로탐색 - 자바(Java)  (0) 2024.05.09
백준 11399번 ATM - 자바(Java)  (0) 2024.04.10
백준 14888번 Java  (0) 2023.10.10
백준 14501번 Java  (0) 2023.10.02