Problem Solving/BOJ
[BOJ][Python]1074번 풀이
NoiB
2022. 2. 24. 19:25
반응형
https://www.acmicpc.net/problem/1074
1074번: Z
한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을
www.acmicpc.net
import sys
ssr = sys.stdin.readline
def sol(n,r,c):
global result
if n==0:
return
if r<2**(n-1) and c<2**(n-1):
sol(n-1,r,c)
elif r<2**(n-1) and c>=2**(n-1):
result += (2**(n-1))*(2**(n-1))
sol(n-1,r,c-2**(n-1))
elif r>=2**(n-1) and c<2**(n-1):
result += 2*((2**(n-1))*(2**(n-1)))
sol(n-1,r-2**(n-1),c)
else:
result += 3*((2**(n-1))*(2**(n-1)))
sol(n-1,r-2**(n-1),c-2**(n-1))
return
n,r,c = map(int, ssr().split())
result = 0
sol(n,r,c)
print(result)
이번엔 재귀로 풀어봤습니다. 작년에 재귀가 참 어렵다고 하소연을 했던 기억이 있는데요. 여전히 어렵긴 합니다... 그래도 그 때 보다는 잘쓰고 있겠죠(숱한 백트래킹으로 단련이 되었다고나 할까요 허허...). 사실 이 문제는 단계별 풀어보기에 재귀 마지막 문제랑 상당히 비슷합니다. 작은 단위의 상황과 큰 단위의 상황이 동일하기 때문에 어떻게든 같은 조건으로 정리할 방법만 찾아내면 남은 건 구현뿐인 문제랄까요. 뭐 이렇게 쉽다는 듯이 얘기하곤 있지만 저도 고민을 많이 해서...
여러분들은 저보단 훨씬 잘하시리라 믿습니다.
반응형