본문 바로가기
코딩테스트_백준풀이

Z #1074 c++ 풀이

by wanna_dev 2023. 10. 23.

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

 

1074번: Z

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

www.acmicpc.net

처음 든 생각은, 0,1,2,3 중에 영역을 계속 찾아들어가야하는 것 까지 생각을 했었다.

그런데 문제는 누적수를 어떻게 구하느냐 였다

 

 

#include <iostream>

using namespace std;

int n, r, c;
int ans;

void Z(int y, int x, int size)
{
    if (y == r && x == c)
    {
        cout << ans << '\n';
        return;
    }

    // r,c가 현재 사분면에 존재한다면
    if (r < y + size && r >= y && c < x + size && c >= x)
    {
        // 1사분면 탐색
        Z(y, x, size / 2);
        // 2사분면 탐색
        Z(y, x + size / 2, size / 2);
        // 3사분면 탐색
        Z(y + size / 2, x, size / 2);
        // 4사분면 탐색
        Z(y + size / 2, x + size / 2, size / 2);
    }
    else
    {
        ans += size * size;
    }
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    cin >> n >> r >> c;
    Z(0, 0, (1 << n));
    return 0;
}

 

다음과 같은 방식으로 범위를 좁히고

범위안에 좌표가 없다면 사이즈^2(네모의 크기)를 누적하여 더하는 방식으로 문제를 풀었다.

 

'코딩테스트_백준풀이' 카테고리의 다른 글

DFS와 BFS #1260 c++ 풀이  (1) 2023.10.24
유기농 배추 #1012 c++ 풀이  (0) 2023.10.24
피보나치 함수 #1003 c++ 풀이  (1) 2023.10.23
solved.ac #18110 c++ 풀이  (0) 2023.10.13
좌표 정렬하기 #11650 c++ 풀이  (0) 2023.10.13