huginn muninn

[백준] 스타트링크 5014 파이썬 에러 본문

코딩테스트

[백준] 스타트링크 5014 파이썬 에러

_maddy 2024. 4. 7. 01:04
 

5014번: 스타트링크

첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다.

www.acmicpc.net

 

 

 

<첫번째 코드 - 틀린 코드>

 

#스타트링크 5014
from collections import deque

f,s,g,u,d=map(int,input().split())

queue=deque()
queue.append(s)
count=0
visited=[0]*(f+1) #방문유무

while queue:
    x=queue.popleft()

    if x==g:
        print(visited[x]) #같으면 멈추고 프린트
        break
    
    for i in (x+u,x-d):
        if 1<=i<=f:
            if visited[i]==0: #방문안했을때만 큐에 집에넣기
                queue.append(i) 
                visited[i]=visited[x]+1 #횟수기록
    
else:
    print('use the stairs')

 

자꾸 틀리는데 분명 맞는 거 같은데 어디서 틀리는지 몰라서 구글링했는데

 

여기 조건을 보면 U,D 변수가 0도 가능하다는 것. 즉 0이니까 버튼을 눌러도 이동한게 아닌게 되어서 카운트를 하면 안된다 ㅠㅜ 이 조건을 빼먹어서 틀린 것이었음 ㅠㅜㅠ

 

<맞은 코드>

 

#스타트링크 5014
from collections import deque

f,s,g,u,d=map(int,input().split())

queue=deque()
queue.append(s)
count=0
visited=[0]*(f+1)

while queue:
    x=queue.popleft()

    if x==g:
        print(visited[x])
        break
    
    for i in (x+u,x-d):
        if i==x:#주의!!!! u나 d가 0일 경우 아무것도 안했으니 세면 안됨. 
            continue
        if 1<=i<=f:
            if visited[i]==0:
                queue.append(i)
                visited[i]=visited[x]+1
    
else:
    print('use the stairs')