⏰ 코딩테스트/백준 알고리즘
백준 알고리즘 - 1074 - Z
U-chan Seon
2021. 8. 22. 21:38
이 문제는 주어지는 입력값이 매우 크고, 제한 시간이 짧기 때문에 리스트를 만들어서 숫자를 나열한 후에 (r, c)에 있는 숫자를 출력하는 방식으로는 통과할 수 없다.
따라서 단순 구현식으로 이중리스트를 만드는 것이 아니라,
규칙을 찾아서 재귀함수를 통해 숫자를 출력해주는 것이 옳은 방법이다.
def solve(n, x, y):
global result
if n == 2:
if x == r and y == c:
print(result)
return # 현재의 함수에서 빠져 나와라
result += 1
if x == r and y + n/2 == c:
print(result)
return
result += 1
if x + n/2 == r and y == c:
print(result)
return
result += 1
if x + n/2 == r and y + n/2 == c:
print(result)
return
result += 1
return
solve(n/2, x, y)
solve(n/2, x, y + n/2)
solve(n/2, x + n/2, y)
solve(n/2, x + n/2, y + n/2)
N,r,c = map(int, input().split())
result = 0
solve(2**N, 0, 0)