보자마다 dfs라고 생각했다.. 그런데 maximum recursion depth exceeded 에러가 나서 읭?
왜 깊이 제한 에러가 나지..? 회귀하도록 조건 잘 걸어준 것 같은데...?
def dfs(current, m, depth):
global answer
if current > 100000 or depth >= answer:
return
if current == m:
answer = min(answer, depth)
return
dfs(current+1, m, depth+1)
dfs(current-1, m, depth+1)
dfs(current*2, m, depth+1)
dfs(current-10, m, depth+1)
if __name__ == "__main__":
T = int(input())
for test_case in range(1, T+1):
answer = 1e9
n, m = map(int, input().split())
dfs(n, m, 0)
print("#{} {}".format(test_case, answer))
if depth> answer 리턴문에서 answer대신에 작은 값을 넣어주면 답을 또 제대로 나온다.. 뭘까?
다른 분들 풀이 궁금해서 검색해보니 모든 분들이 bfs로 푸셨더라.. 이게 원래 좀 bfs유형으로 유명한 문제인가봐..
from collections import deque
def bfs(n, m):
queue = deque()
queue.append((n, 0))
check = {}
while queue:
item, count = queue.popleft()
if check.get(item, 0): continue
check[item] = 1
if item == m: return count
count += 1
if 0 < item + 1 <= 1000000:
queue.append((item + 1, count))
if 0 < item - 1 <= 1000000:
queue.append((item - 1, count))
if 0 < item * 2 <= 1000000:
queue.append((item * 2, count))
if 0 < item - 10 <= 1000000:
queue.append((item - 10, count))
if __name__ == "__main__":
T = int(input())
for test_case in range(1, T+1):
n, m = map(int, input().split())
print("#{} {}".format(test_case, bfs(n, m)))
'CodingTest > SW Expert Academy' 카테고리의 다른 글
[ SW Expert Academy ] 5249. 최소 신장 트리 (0) | 2022.11.13 |
---|---|
[ SW Expert Academy ] 5248. 그룹 나누기 # 다시 풀기 # (0) | 2022.11.13 |
[ SW Expert Academy ] 5209. 최소 생산 비용 (0) | 2022.11.12 |
[ SW Expert Academy ] 5208 전기버스2 (0) | 2022.11.12 |
[ SW Expert Academy ] 5207. 이진탐색 (0) | 2022.11.11 |