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)
'문제 풀이 > 백준' 카테고리의 다른 글
[G4] 백준 10830 - 행렬 제곱 (Python3) (0) | 2024.11.11 |
---|---|
[S1] 백준 1992 - 쿼드트리 (Python3) (1) | 2024.11.10 |
[S3] 백준 1463 - 1로 만들기(Python) (0) | 2024.09.05 |
[G4] 백준 12970 - AB (Python3) (0) | 2024.05.04 |
[G5] 백준 11729 - 하노이 탑 이동 순서 (Python3) (0) | 2024.05.04 |
댓글