JH 개발 블로그
백준 파이썬 1074 Z 본문
https://www.acmicpc.net/problem/1074
N,r,c = map(int,input().split())
ans = 0
while N > 1:
size = (2**N)//2
if r < size and c >= size: #2사분면
ans += size**2
c -= size
elif r >= size and c < size: #3사분면
ans += 2*(size**2)
r -= size
elif r >= size and c >= size: #4사분면
ans += 3*(size**2)
r -= size
c -= size
N -= 1
if (r,c) == (0,0):
print(ans)
elif (r,c) == (0,1):
print(ans+1)
elif (r,c) == (1,0):
print(ans+2)
else:
print(ans+3)
한변의 길이가 2^n인 정사각형을 문제에서 4등분으로 나눈 뒤 재귀적으로 방문한다 했으므로
그대로 4등분으로 나누고, 몇사분면에 위치하는지 구해서 ans에 (size**2) 값을 몇번 더해줄지 정하고
r,c의 위치를 2사분면에 오도록 조정해주는 작업을 재귀적으로 반복하면 된다.
만약 N == 1이 되면 지금까지 구한 ans에 0,1,2,3 중 하나를 더해주면 된다.
'코딩테스트 > 백준' 카테고리의 다른 글
백준 1891 파이썬 사분면 (0) | 2021.12.31 |
---|---|
백준 1201 파이썬 NMK (0) | 2021.12.31 |
백준 파이썬 2263 트리의 순회 (0) | 2021.12.30 |
백준 파이썬 1991 트리 순회 (0) | 2021.12.30 |
백준 파이썬 11729 하노이 탑 이동 순서 (0) | 2021.12.29 |
Comments