본문 바로가기
Beakjoon&프로그래머스/파이썬

[백준/파이썬] 1074번 Z

by 현장 2022. 1. 19.

-코드

N, r, c = map(int, input().split())
result = 0
while N != 0:
    N -= 1
    if r < 2 ** N and c < 2 ** N:
        result += 0
    elif r < 2 ** N <= c:
        result += (2 ** N) * (2 ** N)
        c -= 2 ** N
    elif c < 2 ** N <= r:
        result += (2 ** N) * (2 ** N) * 2
        r -= 2 ** N
    else:
        result += (2 ** N) * (2 ** N) * 3
        c -= 2 ** N
        r -= 2 ** N
print(result)

처음에 재귀를 사용하고 풀려고 했으나 값이 이상하게 더 크게 나와서 고민을 하다가 결국 못 풀어서 찾아보니 계속 사분면으로 나누어서 계산하는 접근 법은 맞았으나 그 뒤로 진행이 되지 않아서 규칙을 찾아보니 한번 사분면으로 나눈 후 해당 사분면의 시작값을 더하고 다시 나누어서 값을 계속 추가하는 방법을 알게 되었고 다시 여러 번 혼자서 해본 후 제출을 하였습니다..