ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1074.Z
    알고리즘/백준 BAEK JOON 2020. 8. 15. 17:36

    이번에 풀어볼 문제는 백준의 Z이다. 재귀함수를 이용하여 탐색을 하는 문제인데

    재귀함수를 잘 활용해야 풀 수 있는 문제이다. 개인적으로 쉬워보이지만 난이도가 상당하다고 느꼈다.

    이런 문제를 잘풀어야하는데.. 흑흑..

     

    1074번: Z

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

    www.acmicpc.net

    이 문제를 푸는 포인트는 두 가지이다.

    1. 재귀함수에서 조건을 통해 굳이 확인할 필요없는 탐색 순번은 그 카운트 만큼 더해주고 넘어가기

    2. 4등분해서 탐색하되 크기에 상관없이 이러한 탐색이 진행되도로 재귀함수를 짤 수 있어야 한다

    => 그래서 생각보다 복잡했고.. 결국 못 풀었다..

    참고 블로그 : https://simsimjae.tistory.com/191#recentComments

     

     


     

    < Code 설명 >

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38

    #pragma
     warning(disable:4996)
    #include <iostream>
    #include <math.h>
     
    using namespace std;
     
    int N, r, c;
    int cnt;
     
    void search(int x, int y, int len){ // x, y좌표, 한변의 길이
        if (x == r && y == c){   // 우리가 찾는 좌표가 나오면
            cout << cnt << endl// 지금까지 카운트한 값을 출력하고
            exit(0);             // 종료
        }
        
        if (len == 1){           // 길이가 1이면 2*2짜리에서 탐색을 하는 것이므로
            cnt++;               // 탐색 하나 했으니 카운트 +1;
            return;              // 리턴 후 다음 등분 1 -> 2 -> 3 -> 4사분면 순으로 Z 모양으로 탐색이 진행됨
        }
            
     
        if (!(x <= r && r < x+len && y <= c && c < y+len)){ // x나 y 좌표가 해당 분면 조건을 벗어나는 경우
            cnt += len*len; // 굳이 해당 사분면을 탐색할 필요가 없으므로 해당 사분면의 최대 카운트를 누적하여 탐색한 것으로 침
            return;
        }
     
        search(x,y,len/2);                         // 1사분면
        search(x, y + len / 2, len / 2);           // 2사분면
        search(x + len / 2, y, len / 2);           // 3사분면
        search(x + len / 2, y + len / 2, len / 2); // 4사분면 탐색
    }
     
    int main() {
        freopen("1074.txt""r", stdin);
        cin >> N >> r >> c;
        search(0,0, pow(2,N));
        return 0;
    }
    cs

     

    반응형

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

    9372.상근이의 여행  (0) 2020.08.20
    1932.정수 삼각형  (0) 2020.08.19
    15686.치킨배달  (0) 2020.08.11
    14503.로봇청소기  (0) 2020.06.01
    16236.아기상어  (1) 2020.05.31

    댓글

Designed by Tistory.