알고리즘 문제/BOJ
1074번 Z
parkit
2019. 1. 6. 16:53
728x90
반응형
https://www.acmicpc.net/problem/1074
나에게는 어려웠다.
다른 분의 코드를 참고하였다.
분할 및 재귀 관련 문제들을 더 풀어보겠다.
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 39 40 41 42 43 44 45 46 47 48 49 50 | #include <iostream> #include <queue> #include <stack> #include <cstdio> #include <vector> #include <cstring> #include <string> #include <math.h> #include <algorithm> #include <map> using namespace std; int r = 0, c = 0, result = 0; void search(int N, int y, int x, int go) { if (y == r && x == c) { printf("%d\n", result); exit(0); } if ((y <= r && r < y + go) && (x <= c && c < x + go)) { // Z 방향 순서로 방문. search(N / 2, y, x, go / 2); // 위 왼쪽 search(N / 2, y, x + go / 2, go / 2); // 위 오른쪽 search(N / 2, y + go / 2, x, go / 2); // 아래 왼쪽 search(N / 2, y + go / 2, x + go / 2, go / 2); // 아래 오른쪽 } else result += go*go; return; } int main(void) { int N = 0; scanf("%d %d %d", &N, &r, &c); N = (int)pow(2, N); search(N, 0, 0, N); return 0; } | cs |
728x90
반응형