본문 바로가기
문제 풀이/백준

[G5] 백준 1074 - Z (Python3)

by JJong | 쫑 2024. 11. 10.

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)

댓글