[f+1][2] 크기의 visited라는 list를 생성하고
0번 열에 방문체크를, 1번 열에 버튼을 누른 횟수를 저장해서 풀었다.
from collections import deque
f,s,g,u,d = map(int,input().split())
visited=[[0 for j in range(2)]for i in range(f+1)]
def bfs(s,g):
queue = deque()
queue.append(s)
visited[s][0]=1
while queue:
a = queue.popleft()
# 목표 지점에 도달했으면 횟수를 출력하고 리턴
if a==g:
print(visited[a][1])
return
# 위에 아직 방문하지 않은 층이 있다면 이동
if a+u<=f and visited[a+u][0]==0:
queue.append(a+u)
visited[a+u][0] = 1
visited[a+u][1] = visited[a][1]+1
# 아래에 아직 방문하지 않은 층이 있다면 이동
if a-d>0 and visited[a-d][0]==0:
queue.append(a-d)
visited[a-d][0] = 1
visited[a-d][1] = visited[a][1]+1
print("use the stairs")
return
bfs(s,g)
위로 올라가거나 아래로 내려가는 부분을 반복문을 사용하면 코드를 줄일 수 있어 아래의 코드로 수정했다.
from collections import deque
f,s,g,u,d = map(int,input().split())
visited=[[0 for j in range(2)]for i in range(f+1)]
def bfs(s,g):
queue = deque()
queue.append(s)
visited[s][0]=1
while queue:
a = queue.popleft()
if a==g:
print(visited[a][1])
return
for i in (a+u, a-d):
if 0<i<=f and visited[i][0] == 0:
queue.append(i)
visited[i][0] = 1
visited[i][1] = visited[a][1]+1
if visited[g][1] ==0:
print("use the stairs")
return
bfs(s,g)
풀이도 금방 떠올라서 기분이 좋았다.
매일 공부하는 보람이 있긴 한가보다..
처음엔 34%에서 틀렸다고 판정받고, 그 뒤엔 74%에서 틀렸다고 나와서 뭐가 문제인가했더니..
현 위치 - d를 한 값이 0보다 클 때가 아니라 0 이상일 때라고 해서 그게 문제였다.
좀 더 신중히 생각할 필요가 있는 듯
'[BOJ] - Python' 카테고리의 다른 글
[백준] 1697 : 숨바꼭질 python (0) | 2023.08.26 |
---|---|
[백준] 2573 : 빙산 python (0) | 2023.08.25 |
[백준] 9205 : 맥주 마시면서 걸어가기 python (0) | 2023.08.24 |
[백준] 14503 : 로봇 청소기 python (0) | 2023.08.24 |
[백준] 2468 : 안전 영역 python (0) | 2023.08.22 |