알고리즘/너비 우선 탐색(bfs)

18352-백준-특정 거리의 도시 찾기

2023. 2. 17. 23:36
목차
  1. 1. 문제 출처
  2. 2. 풀이
  3.  

1. 문제 출처

https://www.acmicpc.net/problem/18352

 

18352번: 특정 거리의 도시 찾기

첫째 줄에 도시의 개수 N, 도로의 개수 M, 거리 정보 K, 출발 도시의 번호 X가 주어진다. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) 둘째 줄부터 M개의 줄에 걸쳐서 두 개

www.acmicpc.net

2. 풀이

bfs(너비 우선 탐색)를 이용하여 구하였다.

 

제일 어려웠던점은 아이러니하게 알고리즘 구현이 아닌 시간 초과 문제 였다.처음에는 deque 대신 리스트에 pop()을 하는 형식으로 구현 하였으나 시간 초과가 발생하였다. 이를 deque 자료형을 불러와 popleft 를 대신 사용 하였더니 해결되었다......다음 부터는 deque를 애용해야 겠다..

from collections import deque
#입력값 받기
N, M, K, X = map(int, input().split())
X = X-1
road_list = [[] for _ in range(N)]


# index = 시작 도시 # value = 시작 도시에서 갈수 있는 도시 리스트
for _ in range(M):
    start_city,end_city  = list(map(int, input().split()))
    road_list[start_city-1].append(end_city-1)

# bfs
def min_distance():
	# 방문 리스트 초기화 
    visted = [-1 for i in range(N)]
    # 시작 도시는 0으로
    visted[X] = 0
    # bfs를 위한 queue
    queue = deque([X])
    while queue:
    # queue 에서 값 꺼내기(FIFO)
        city  = queue.popleft()
        for next_city in road_list[city]:
        # 만약 방문 하지 않았다면
            if visted[next_city] == -1:
            # 전 도시 +1 값을 저장(시작 도시로 부터 최단 거리)
                visted[next_city] = visted[city]+1
                # queue에 추가
                queue.append(next_city)

    check =True
    # K인 도시 출력
    for idx in range(N):
        if visted[idx] == K:
            print(idx+1)
            check = False
    if check:
        print(-1)
        

min_distance()

 

'알고리즘 > 너비 우선 탐색(bfs)' 카테고리의 다른 글

16234-백준-인구이동  (0) 2023.02.23
18405-백준-경쟁적 전염  (0) 2023.02.18
14502 - 백준 - 연구소  (0) 2023.02.15
9205-백준-맥주 마시면서 걸어가기  (0) 2023.02.07
7562-백준-나이트의 이동  (0) 2023.02.06
  • 1. 문제 출처
  • 2. 풀이
  •  
'알고리즘/너비 우선 탐색(bfs)' 카테고리의 다른 글
  • 16234-백준-인구이동
  • 18405-백준-경쟁적 전염
  • 14502 - 백준 - 연구소
  • 9205-백준-맥주 마시면서 걸어가기
easysheep
easysheep
easysheep
나의 개발자 일기
easysheep
전체
오늘
어제
  • 분류 전체보기 (95)
    • 파이썬 (7)
      • 자료형 (0)
      • matplotlib (2)
      • Tensorflow (1)
      • Selenium (1)
      • Numpy (2)
      • Pandas (1)
    • 장난감 프로젝트 (3)
    • AI_수학 (0)
      • 통계 (0)
    • 알고리즘 (63)
      • 브루트 포스 (3)
      • 그리드 알고리즘 (5)
      • 너비 우선 탐색(bfs) (12)
      • 깊이 우선 탐색(DFS) (1)
      • 최단 경로 구하기(플로이드 워셜) (1)
      • 동적 계획법(Dynamic Programming) (8)
      • Dijkstra algorithm(데이크스트라 알.. (6)
    • Backend (1)
      • Django (1)
    • 딥러닝 (1)
      • Regression(회귀) (0)
    • 머신러닝 (3)
      • Daycon (1)
      • 직접 구현 (1)
    • AWS (3)
    • DB (2)
      • MongoDB (2)
    • kubernetes (3)
    • Docker (4)
    • Stress Test Toll (0)
      • Jmeter (0)
      • nGrinder (0)
    • Ubuntu (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • error: version in "./docker-compose.yaml" is unsupported.
  • 2*n 타일링
  • grafana
  • mysql
  • ML
  • ubuntu
  • 머신 러닝
  • helm
  • 파이썬
  • Mac
  • dynamic programming
  • Numpy
  • 너비 우선 탐색
  • 알고리즘
  • gradio
  • 데이크스트라
  • matplotlib
  • BFS
  • validate service connection
  • 헬름 설치
  • 문자열
  • Python
  • Bind Mounts
  • 우분투에 헬름 설치
  • error
  • aws
  • heap
  • Docker
  • 백준
  • Cannot stat file /proc/528/fd/0: Permission denied

최근 댓글

최근 글

hELLO · Designed By 정상우.
easysheep
18352-백준-특정 거리의 도시 찾기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.