-코드
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)
처음에 재귀를 사용하고 풀려고 했으나 값이 이상하게 더 크게 나와서 고민을 하다가 결국 못 풀어서 찾아보니 계속 사분면으로 나누어서 계산하는 접근 법은 맞았으나 그 뒤로 진행이 되지 않아서 규칙을 찾아보니 한번 사분면으로 나눈 후 해당 사분면의 시작값을 더하고 다시 나누어서 값을 계속 추가하는 방법을 알게 되었고 다시 여러 번 혼자서 해본 후 제출을 하였습니다..
'Beakjoon&프로그래머스 > 파이썬' 카테고리의 다른 글
[백준/파이썬] 15751번 Teleportation (0) | 2022.01.20 |
---|---|
[백준/파이썬] 24218번 Double Crypt 1 (0) | 2022.01.20 |
[백준/파이썬] 13580번 Andando no tempo (0) | 2022.01.19 |
[백준/파이썬] 1780번 종이의 개수 (0) | 2022.01.18 |
[백준/파이썬] 20687번 Rulltrappa (0) | 2022.01.18 |