deque사용하기 위해서 라이브러리 추가해야 한다.
from collections import deque
pop
/push
가 아니라 popleft
/append
사용해야 함! C++이랑 비슷하겠지 싶어서 느낌대로 쳤다가 무수한 오류에 당황했다. 이런 문법적인 디테일 꼭))반드시 확인하기
원래 dfs로 풀려고 했는데, 재귀횟수가 너무 많아서 효율이 떨어지는 문제가 생겨서 bfs로 노선 변경했다. 신경쓴 부분이 딱 두개 있는데,
정도가 있다. 큐에 노드가 들어가면 그만큼 반복되니까 최대한 줄이려다보니 f > ny >= 0
를 넣게 됐다. 처음에는 최고층이 5층인 건물에 내가 3층에 있고 up버튼을 누를 때 한번에 3층 씩 이동하게 되면 나는 5층에 간다고 생각했는데, (만약, U층 위, 또는 D층 아래에 해당하는 층이 없을 때는, 엘리베이터는 움직이지 않는다)
라는 지문이 있었다. 호호
덕분에 금방 해결할 수 있었다.
from collections import deque
def bfs(s):
q = deque()
q.append(s)
visits[s] = 1
ans[s] += 1
while q:
y = q.popleft()
for i in range(2):
ny = y+ud[i]
if f > ny >= 0 and visits[ny] == 0:
q.append(ny)
ans[ny] = ans[y]+1
visits[ny] = 1
if __name__ == "__main__":
f, s, g, u, d = map(int, input().split())
ud = [u, -d]
ans = [-1 for i in range(f)]
visits = [0 for i in range(f)]
bfs(s-1)
if ans[g-1] == -1:
print("use the stairs")
else:
print(ans[g-1])
동아리 지원하면서 파이썬으로 문제를 제출해야 되는 항목이 있어서 급하게 공부를 시작했다. 파이썬 공부한지 딱 일주일 정도 됐는데, f > ny >= 0
가 되는 것도 그렇고 메인 함수 안에 있는 변수들을 다른 함수에서 바로 가져다 쓸 수 있는 것도 그렇고... 마음에 드는 부분들이 있다.
불편한 점도 있는데 개인적으로 탭이랑 띄어쓰기 수정하다가 잘못 건드려서 오류나는게 제일 번거롭다. 중괄호 쓰는게 아직은 더 편하다. + 조건문 쓸때 계속 if() 부터 쓰고 시작해서 지우는게 한두번이 아니다ㅋㅋㅋ
동아리 자소서때문에 일주일 머리 싸매다가 오늘 겨우 제출했는데 이제 면접 준비 해야 함 엉엉
그래도 무언가에 도전하는 일은 늘 즐겁다. 내년에 복학하기로 결정했는데 동아리 일 잘 풀려서 복학 전에 프로젝트 한번 제대로 해보고싶다.