본문 바로가기
Algorithm(BOJ, Python)/Dynamic Programing

[백준_1074] Z python

by kurooru 2022. 6. 15.

4사분면을 계속해서 나눠나가는 규칙을 발견

 
# 입력 받기
N, r, c = map(int, input().split())

# ans 초기 설정
ans = 0

# 4사분면으로 나눠서 생각 -> 계속 좁혀 갈 예정
while N != 0:

N -= 1

# 1사분면에 해당할 경우
if r < (2 ** N) and c < (2 ** N):
    ans += 0 # 더해줄 것 없음

# 2사분면에 해당할 경우
elif r < (2 ** N) and c >= (2 ** N):
    ans += (2 ** (2 * N)) # 그 사분면의 맨 왼쪽 위 꼭짓점을 더해줌
    c -= (2 ** N) # 다음 좁혀진 4사분면으로 이동

# 3사분면에 해당할 경우
elif r >= (2 ** N) and c < (2 ** N):
    ans += (2 ** (2 * N)) * 2 # 그 사분면의 맨 왼쪽 위 꼭짓점을 더해줌
    r -= (2 ** N) # 다음 좁혀진 4사분면으로 이동
 
# 4사분면에 해당할 경우
else:
    ans += (2 ** (2 * N)) * 3 # 그 사분면의 맨 왼쪽 위 꼭짓점을 더해줌
    r -= (2 ** N) # 다음 좁혀진 4사분면으로 이동
    c -= (2 ** N) # 다음 좁혀진 4사분면으로 이동
 
print(ans)