Notice
Recent Posts
Recent Comments
Link
알고리즘 모음(C++)
백준 1074 - Z(C++) 본문
문제 링크입니다. https://www.acmicpc.net/problem/1074
재귀를 이용한 문제였습니다.
규칙을 찾는 것이 중요했습니다.
(R , C)까지 모든 경로를 탐색하는 것이 아닌 계속 구역을 나누면서 더해주는 것이 중요합니다.
(R,C)가 처음에 몇분면인지, 그리고 얼마를 더해야하는지도 구해봤습니다.
이번에는 4분면으로 다시 나눌때 어떻게 해야하는지를 확인하겠습니다.
위의 정보를 이해하면 코드를 쉽게 짤 수 있습니다.
자세한 것은 코드를 참고해주세요.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <queue>
#include <cmath>
#include <cstdio>
#include <string>
#include <deque>
#include <stack>
using namespace std;
int N, C, R;
int ans;
void solve(int n, int x, int y) {
if (n == 0) return;
int Size = pow(2, n);
int half = Size / 2;
int num = half * half;
if (x / half == 0 && y / half == 0) { // 1사분면일때
ans += num * 0;
solve(n - 1, x % half, y % half);
}
else if (x / half == 0 && y / half == 1) { // 2사분면일때
ans += num * 1;
solve(n - 1, x % half, y % half);
}
else if (x / half == 1 && y / half == 0) { //3사분면일때
ans += num * 2;
solve(n - 1, x % half, y % half);
}
else if (x / half == 1 && y / half == 1) { //4사분면일때
ans += num * 3;
solve(n - 1, x % half, y % half);
}
}
int main() {
cin.tie(0);
cout.tie(0);
cin >> N >> C >> R;
solve(N, C, R);
cout << ans;
return 0;
}
질문 및 조언 댓글 남겨주세요
'백준' 카테고리의 다른 글
백준 1167 - 트리의 지름(C++) (0) | 2022.02.18 |
---|---|
백준 11723 - 집합(C++) (0) | 2022.02.14 |
백준 7662 - 이중 우선순위 큐(C++) (0) | 2022.02.14 |
백준 5430 - AC(C++) (0) | 2022.02.13 |
백준 6064 - 카잉 달력(C++) (0) | 2022.02.13 |