이 문제는 주어지는 입력값이 매우 크고, 제한 시간이 짧기 때문에 리스트를 만들어서 숫자를 나열한 후에 (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)
'⏰ 코딩테스트 > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 - 7490 - 0 만들기 (0) | 2021.08.24 |
---|---|
백준 알고리즘 - 2747 - 피보나치 수 (0) | 2021.08.22 |
백준 알고리즘 - 10989 - 수 정렬하기 3 (0) | 2021.08.21 |
백준 알고리즘 - 11650 - 좌표 정렬하기 (0) | 2021.08.21 |
백준 알고리즘 - 10814 - 나이순 정렬 (0) | 2021.08.21 |