[백준] 24444번 알고리즘 수업 - 너비 우선 탐색 1 - python

2022. 6. 9. 13:52·알고리즘 공부/BFS & DFS

 

<문제>

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

 

24444번: 알고리즘 수업 - 너비 우선 탐색 1

첫째 줄에 정점의 수 N (5 ≤ N ≤ 100,000), 간선의 수 M (1 ≤ M ≤ 200,000), 시작 정점 R (1 ≤ R ≤ N)이 주어진다. 다음 M개 줄에 간선 정보 u v가 주어지며 정점 u와 정점 v의 가중치 1인 양방

www.acmicpc.net

<시간 복잡도>

이 문제의 시간 복잡도는 n^2? for 문이랑 while문이 들어가니 그렇게 생각한다

<코드>

import sys
from collections import deque
sys.setrecursionlimit(100000)
n, m, r = map(int, sys.stdin.readline().split())

graph = [[] for i in range(n + 1)]
visited = [False] * (n + 1)
cnt = 1
visited_order = [0] * (n+1)
for i in range(m):
    u, v = map(int, sys.stdin.readline().split())
    graph[u].append(v)
    graph[v].append(u)
for i in range(len(graph)):
    graph[i].sort()
    
def bfs(r,visited,cnt,visited_order):
    que = deque()
    que.append(r)
    while que:
        now = que.popleft()
        if not visited[now]:
            visited[now] = True
            visited_order[now] = cnt
            cnt+=1
            for i in range(len(graph[now])):
                que.append(graph[now][i])

    return visited_order

visited_order = bfs(r,visited,cnt,visited_order)
for i in range(1,len(visited_order)):
    print(visited_order[i])

<해설>

확실히 bfs 는 dfs 보다 직관적이여서 쉽다. 

우선 이 문제를 풀때는 너비 탐색이므로 deque 를 이용하였다. 

문제를 풀면서 우선 방문 가능한 곳을 다 que 에 넣어주고 하나씩 빼면서 방문 처리하면서 진행하면 된다. 

 

약간 문제를 풀때 함수에 입력하는 값들이 너무 지져분한거 같다.

클린 코드를 짜기위해 노력해야겠다.

반응형

'알고리즘 공부 > BFS & DFS' 카테고리의 다른 글

[백준] 2206번 벽 부수고 이동하기 - python  (0) 2022.06.10
[백준] 24445번 알고리즘 수업 - 너비 우선 탐색 2 - python  (0) 2022.06.10
[백준] 24480번 알고리즘 수업 - 깊이 우선 탐색 2 - python  (0) 2022.06.09
[백준] 24479번 알고리즘 수업 - 깊이 우선 탐색 1- python  (0) 2022.06.09
[백준] 2583번 영역 구하기 - 파이썬  (0) 2022.05.11
'알고리즘 공부/BFS & DFS' 카테고리의 다른 글
  • [백준] 2206번 벽 부수고 이동하기 - python
  • [백준] 24445번 알고리즘 수업 - 너비 우선 탐색 2 - python
  • [백준] 24480번 알고리즘 수업 - 깊이 우선 탐색 2 - python
  • [백준] 24479번 알고리즘 수업 - 깊이 우선 탐색 1- python
코딩 코딩 코오딩
코딩 코딩 코오딩
  • 코딩 코딩 코오딩
    코딩하는 누누
    코딩 코딩 코오딩
  • 전체
    오늘
    어제
    • 분류 전체보기 (491)
      • 생산성 (2)
        • 인텔리제이 (2)
      • 프로젝트 기록 (14)
        • git (2)
        • spring (3)
        • TestCode (2)
        • spring security (3)
        • 기타 (2)
        • MySQL (0)
        • Cloud (2)
      • 회고 (4)
      • Spring (6)
      • JPA (0)
      • DB (4)
        • MySql (2)
        • Redis (1)
      • Java (7)
        • JSP (1)
      • 잡담 (1)
      • CS (30)
        • 컴퓨팅 사고 (0)
        • 배열 (4)
        • 알고리즘 (8)
        • 메모리 (7)
        • 자료구조 (9)
        • 암호학 (2)
      • opencv (14)
      • AI (56)
        • 머신러닝 (2)
        • 딥러닝 (7)
        • tensorflow (3)
        • 머신러닝(딥러닝) 정리 (21)
        • 강화학습 (7)
        • 논문 읽기 (1)
        • 잡동사니 (1)
        • python AI (13)
        • 선형대수 (1)
        • 확률론 (0)
      • 알고리즘 공부 (177)
        • 그래프 이론 (0)
        • 다익스트라 (4)
        • 위상정렬 (3)
        • 신장트리-크루스칼 알고리즘 (4)
        • 플로이드 워셜 (3)
        • 이진탐색 (9)
        • 백트래킹 (11)
        • 부르드포스 (9)
        • 다이나믹 프로그래밍 (20)
        • BFS & DFS (24)
        • 그리디 (6)
        • 구현 (15)
        • 정렬 (3)
        • 기타 (62)
        • 수학? (1)
      • 코딩 (173)
        • 파이썬(python) (15)
        • c언어 (13)
        • 프로그래머스 lv1 (46)
        • 프로그래머스 lv2 (41)
        • 백준 - c++ (49)
        • Softeer (9)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    인접리스트
    C언어 기초
    순차 탐색
    코딩테스트
    큐
    소수찾기
    자료구조
    정렬
    에라토슽네스의 체
    스택
    백준
    인접행렬
    그리디
    선택정렬
    코딩
    BFS
    코딩문제
    코딩기초
    DFS
    삽입 정렬
    캘리브레이션
    프로그래머스
    c언어
    다이나믹 프로그래밍
    n진법 변환
    이미지처리
    왜곡보정
    알고리즘
    if문
    코딩기초스킬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩 코딩 코오딩
[백준] 24444번 알고리즘 수업 - 너비 우선 탐색 1 - python
상단으로

티스토리툴바