김호쭈
DevForYou
김호쭈
전체 방문자
오늘
어제
  • 분류 전체보기 (321)
    • • 데이터베이스(DB) (9)
      • __SQL__ (9)
    • •알고리즘(Algorithm ) (117)
      • 문제풀이 (99)
      • 스터디 (14)
      • 알고리즘 팁 (4)
    • •Compter Science (57)
      • Operating System (25)
      • Computer Network (1)
      • Computer Vision (16)
      • Artificial Intelligence (14)
      • Software Technology (1)
    • • 독서 (36)
      • Design Pattern (24)
      • 객체지향의 사실과 오해 (1)
      • Object Oriented Software En.. (11)
    • • 개발 (26)
      • React (3)
      • node.js (6)
      • Django (11)
      • Spring boot (6)
    • • 개발Tip (4)
      • GitHub (0)
    • •프로젝트 (2)
      • 물물 (2)
    • •App (54)
      • 안드로이드 with Kotlin (50)
      • 코틀린(Kotiln) (4)
    • •회고 (8)
    • •취준일기 (3)
    • • 기타 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • KMU_WINK
  • 원격저장소
  • local저장소
  • Remote저장소
  • 깃허브데스크탑
  • GitHubDesktop
  • 로컬저장소
  • ㄱ

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
김호쭈

DevForYou

•알고리즘(Algorithm )/문제풀이

[백준5014&파이썬] BFS은 1차원에서도 최단거리를 구할 수 있다.

2023. 4. 8. 09:49

# 문제

백준 5014 스타트링크 파이썬 풀이

 

5014번: 스타트링크

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

www.acmicpc.net

# 코드

import sys
from collections import deque

FAIL = "use the stairs"

F, S, G, U, D = map(int, sys.stdin.readline().split())
# 건물 높이 F
# 현재 위치 S
# 목표 지점 G
# 위로 U층 이동
# 아래로 D층 이동

dirs = [
  U, (-1*D)
]
# print(dirs)
visit = [False] * (F+1)
visit[0] = True # 0은 사용 안함

dq = deque()
dq.append((S,0)) # 현재 위치 삽입, 횟수
visit[S] = True

cnt = 0
while len(dq) != 0 :
  cur = dq.popleft()
  if cur[0] == G:
    print(cur[1])
    exit()
  # print(cur)

  for dir in dirs:
    next = (cur[0] + dir, cur[1] + 1 )
    if 1 <= next[0] <= F :
      if visit[next[0]] == False :
        # 다음으로 이동
        dq.append(next)
        visit[next[0]] = True

        # print("next : " , next)

        if next[0] == G :
          print(next[1])
          exit()

print(FAIL)

 

# 풀이

## 기억났던 문제

 

1697번: 숨바꼭질

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일

www.acmicpc.net

  • 옛날에 숨바꼭질 문제와 아주 유사했다. 이때는 DP를 공부했던 터라 이런거 보면 무조건 DP로 덤벼들었는데 그때는 DP로 풀다가 결국 못풀었던 기억이 있었다. 그리고 BFS로 풀어야 함을 알았고 BFS에서 이전 단계를 기억시키는 법을 통해 최단거리를 얻는 방법을 공부할 수 있었다. 
dq = deque()
dq.append((S,0)) # 현재 위치 삽입, 횟수
  • 위 처럼, 튜플 형태로 만들고 두번째에는 횟수를 기억하게 하는 방법이다.
  • 이번에는 문제를 풀면서 딱 해당 문제가 바로 스쳐지나갔었다.

 

## 1차원에서 이동과 최단거리를 구할 수 있다.

  • 엘리베이터는 U층과 D층으로 위로 또는 아래로 이동한다. 2차원에서 이동을 ( x, y ) 와 같은 형식으로 표현해 dirs를 만들어 사용했었다.
  • 이번 문제는 튜플이 아니라 그냥 U , -1 * D 로 dirs를 만들었다.
dirs = [
  U, (-1*D)
]
  • 1차원에서의 최단거리를 구할 수 있다는 생각만 할 수 있다면 그렇게 특별할 것 없는 문제 같다.
저작자표시 (새창열림)

'•알고리즘(Algorithm ) > 문제풀이' 카테고리의 다른 글

[백준6593&파이썬] BFS로 3차원 공간을 탐색할 수 있다.  (0) 2023.04.09
[백준2468&파이썬] BFS를 사용할때 탐색 단위에 대한 생각이 필요하다.  (0) 2023.04.08
[백준2583&파이썬] 좌표평면을 배열로 표현하는 방법  (0) 2023.04.06
[백준7562&파이썬] BFS를 활용하여 최단거리에 도달하는 방법  (0) 2023.04.05
[백준4179&파이썬] 불!/BFS를 이용해 조건에 맞는 최단거리를 구하는 방법  (0) 2023.04.04
    '•알고리즘(Algorithm )/문제풀이' 카테고리의 다른 글
    • [백준6593&파이썬] BFS로 3차원 공간을 탐색할 수 있다.
    • [백준2468&파이썬] BFS를 사용할때 탐색 단위에 대한 생각이 필요하다.
    • [백준2583&파이썬] 좌표평면을 배열로 표현하는 방법
    • [백준7562&파이썬] BFS를 활용하여 최단거리에 도달하는 방법
    김호쭈
    김호쭈
    공부하고 정리하고 기록하기

    티스토리툴바