티스토리 뷰

알고리즘/백준(BOJ)

백준 - 1074 Z

시나모온 2020. 8. 13. 23:39

문제 링크입니다 : https://www.acmicpc.net/problem/1074

 

1074번: Z

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

www.acmicpc.net

분할 정복 + DP문제였다. 

 

문제는 재미있고 아이디어는 쉬웠다.

 

분할 정복과 DP를 동시에 구현하려고 하니 실수가 생기는 경우가 있었다.

 

 

 

#include <iostream>
#include <vector>
#include <cstring>
#include <cmath>

using namespace std;
typedef long long ll;

const int dy[4] = {0, 0, 1, 1};
const int dx[4] = {0, 1, 0, 1};

ll N, r, c;
ll cnt = 0;

ll cache[16];

ll getTime(ll y, ll x, ll N) {
    if(N == 0 && y == r && x == c) {
        cout << cnt++;
        return 1;
    }
    if(N == 0) {
        cnt++;
        return 1;
    }
    
    ll& ret = cache[N];
    if(!(y <= r && r < y + pow(2, N) && x <= c && c < x + pow(2, N)) && ret != -1) {
        cnt += ret;
        return ret;
    }

    ret = 0;
    ll half = pow(2, N - 1);
    for(int dir = 0; dir < 4; dir++) {
        ll ny = y + dy[dir] * half;
        ll nx = x + dx[dir] * half;
        ret += getTime(ny, nx, N - 1);
    }

    return ret;
}


int main() {
    cin >> N >> r >> c;
    memset(cache, -1, sizeof(cache));
    ll temp = getTime(0, 0, N);

    

    return 0;
}

 

 

 

개발 환경 : vscode

지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

 

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

백준 - 11726 2xn 타일링  (0) 2020.08.14
백준 - 2193 이친수  (0) 2020.08.14
백준 - 1725 히스토그램  (0) 2020.08.13
백준 - 2104 부분배열 고르기  (0) 2020.08.13
백준 - 16947 서울 지하철 2호선  (0) 2020.08.09
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/04   »
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
글 보관함