하다보니

1074번-Z 본문

알고리즘 풀이/백준

1074번-Z

claire 2022. 2. 8. 15:40
#include<bits/stdc++.h>
using namespace std;

int func(int n,int r,int c) {
	if (n == 0)return 0;
	int half = 1 << (n - 1);
	if (r < half&&c < half)return func(n - 1, r, c);
	if (r < half&&c >= half)return half*half+func(n - 1, r, c - half);
	if (r >= half && c < half)return half * half * 2 + func(n - 1, r - half, c);
	if (r >= half && c >= half)return half * half * 3 + func(n - 1, r - half, c - half);
}

int main() {
	int n, r, c;
	cin >> n >> r >> c;
	cout<<func(n, r, c);
}

귀납적인 사고로 재귀에 접근하는 습관. 절차적으로 증명하려 애쓰지 말아라. 

- 파이썬

def func(n,r,c):
    if n==0:return 0
    half=1<<(n-1)
    if r<half and c<half:return func(n-1,r,c)
    if r<half and c>=half:return half*half+func(n-1,r,c-half)
    if r>=half and c<half:return half*half*2+func(n-1,r-half,c)
    if r>=half and c>=half:return half*half*3+func(n-1,r-half,c-half)

n,r,c=map(int,input().split())
print(func(n,r,c))

'알고리즘 풀이 > 백준' 카테고리의 다른 글

3015번-오아시스 재결합  (0) 2022.02.16
6198번-옥상 정원 꾸미기  (0) 2022.02.09
11729번-하노이 탑 이동 순서  (0) 2022.02.08
5014번-스타트링크  (0) 2022.02.08
5427번-불  (0) 2022.02.08