[boj][python] 5014 스타트링크

ppparkta·2022년 12월 4일
1

Problem solving

목록 보기
51/65

5014 스타트링크


첫번째 파이썬 문제풀이 글 *^^*

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() 부터 쓰고 시작해서 지우는게 한두번이 아니다ㅋㅋㅋ

동아리 자소서때문에 일주일 머리 싸매다가 오늘 겨우 제출했는데 이제 면접 준비 해야 함 엉엉

그래도 무언가에 도전하는 일은 늘 즐겁다. 내년에 복학하기로 결정했는데 동아리 일 잘 풀려서 복학 전에 프로젝트 한번 제대로 해보고싶다.

profile
겉촉속촉

0개의 댓글