문제 풀이/백준
[G5] 백준 1074 - Z (Python3)
gnoJJ
2024. 11. 10. 19:58
https://www.acmicpc.net/problem/1074
💡 해결방법
분할정복 알고리즘을 적용해서 문제를 해결했다.
👀 풀이
- 항상 2**(N*2) 매트릭스
- (r, c) 좌표 정보
위 두 정보를 바탕으로 (r, c)가 몇 사분면에 있는지 파악해서 N 번만에 몇 번만에 방문하는지 계산한다.
🧾 코드
# 1074
N, r, c = map(int, input().split())
ans = 0
while N:
N -= 1
# 제1사분면
if r < 2**N and c >= 2**N:
ans += 2 ** (N*2)
c -= 2**N
# 제2사분면
elif r < 2**N and c < 2**N:
ans += 0
# 제3사분면
elif r >= 2**N and c < 2**N:
ans += 2*(2**(N*2))
r -= 2**N
# 제4사분면
elif r >= 2**N and c >= 2**N:
ans += 3*(2**(N*2))
r -= 2 ** N
c -= 2 ** N
print(ans)