[백준/Python] MooTube (Silver) 15591번

2023. 3. 13. 17:06· Koala - 10기/코딩테스트 준비 스터디

정답 풀이

import sys
from collections import deque
N, Q = map(int, sys.stdin.readline().split())


# make weighted graph
G = {n:deque() for n in range(1, N+1)}
for _ in range(N - 1):
    p, q, v = map(int, sys.stdin.readline().split())
    G[p].append((q,v))
    G[q].append((p,v))

for _ in range(Q):
    ki, vi = map(int,sys.stdin.readline().split())
    visited, queue, ans = [0]*(N+1), deque(), 0

    # BFS
    visited[vi] = 1
    for v, k in G[vi]:
        visited[v]  = 1
        queue.append((v, k))

    while queue:
        v, k = queue.popleft()
        
        if k >= ki:
            ans += 1
            for nv, nk in G[v]:
                if not visited[nv]:
                    visited[nv] = 1
                    queue.append((nv, min(k, nk)))

    print(ans)

 

 

시간 초과 풀이

import sys
from copy import deepcopy
from collections import deque
si = sys.stdin.readline
N, Q = map(int, si().split())

# 1. 그래프 만들기
graph = [[] for i in range(N+1)]
check = [set() for i in range(N+1)]
for i in range(N-1):
    p, q, r = map(int, si().split())
    graph[p].append([q, r])
    graph[q].append([p, r])
    check[p].add(q)
    check[q].add(p)

# 2. bfs를 사용할 수가 없는듯?? 가는 길만 탐색하는 것이 아니기 때문에 섞인다...
# 각각의 root를 q에 저장해 최소 USADO를 구한다. 
def bfs(start, end):
    q = deque()
    visited = [0 for i in range(N+1)]
    q.append([start, []])
    visited[start] = 1 # 방문처리
    while q:
        start, root = q.popleft()
        if start == end:
            return min(root)
        for idx, val in graph[start]:
            if visited[idx] == 1: continue

            new_root = deepcopy(root)
            new_root.append(val)

            q.append([idx, new_root])
            visited[idx] = 1 # 방문처리

for start in range(1, N+1):
    for i in range(start + 1, N+1):
        if i in check[start]: continue

        mini = bfs(start, i)
        graph[start].append([i, mini])
        graph[i].append([start, mini])

for i in range(Q):
    k, v = map(int, si().split())
    answer = 0 
    for x, y in graph[v]:
        if y >= k:
            answer += 1
    print(answer)

 

시간복잡도에서 많은 차이가 있는데 이는 구현 방법이 비효율적이기 때문이다.

시간초과 풀이에서는 start위치와 end의 위치를 알아야하므로 for문을 부득이 두번 돌릴 수밖에 없었다. 1번에서 3번으로 가는 경우, 1번에서 4번으로 가는 경우 등을 모두 나누어 판단해야했기 때문이다. 추가로 단순한 bfs로 구현을 할 순 없었으므로 경로 list를 추가해 그 중 가장 작은값을 return하도록 min 함수를 활용할 수밖에 없었다. 따라서 시간복잡도는 O(N^3 * bfs()) 정도 되므로 시간초과가 난 것이다. 

 

하지만 정답 코드의 경우 어차피 연결된 것이므로 min으로 담아가면서 계산해주었다.  

저작자표시 (새창열림)

'Koala - 10기 > 코딩테스트 준비 스터디' 카테고리의 다른 글

[백준/JAVA] #3273 두 수의 합  (0) 2023.03.13
[백준/JAVA] #1931 회의실배정  (0) 2023.03.13
[백준/Python] #1895 필터  (0) 2023.03.12
[백준 / python] #13423: Three Dots  (0) 2023.03.12
[Baekjoon/Python] 16198 에너지 모으기  (0) 2023.03.12
'Koala - 10기/코딩테스트 준비 스터디' 카테고리의 다른 글
  • [백준/JAVA] #3273 두 수의 합
  • [백준/JAVA] #1931 회의실배정
  • [백준/Python] #1895 필터
  • [백준 / python] #13423: Three Dots
KauKoala
KauKoala
항공대 알고리즘 동아리 Koala 🥰
Koala항공대 알고리즘 동아리 Koala 🥰
KauKoala
Koala
KauKoala
전체
오늘
어제
  • 분류 전체보기 (1889)
    • 공지 게시판 (10)
    • 정보 게시판 (8)
    • Codeforce (15)
    • acm-icpc (6)
    • Koala - 1기 (16)
    • Koala - 2기 (111)
      • Programming Contest (1)
      • A반 (20)
      • B반 (39)
      • C반 (22)
      • 기초 강의 (18)
    • Koala - 3기 (10)
      • 기초 스터디 (7)
    • Koala - 4기 (67)
    • Koala - 5기 (144)
      • 기초 알고리즘 스터디 (75)
      • 코딩테스트 준비 스터디 (68)
    • Koala - 6기 (102)
      • 기초 알고리즘 스터디 (75)
      • 코딩테스트 준비 스터디 (25)
      • 모의 테스트 스터디 (1)
    • Koala - 7기 (167)
      • 기초 알고리즘 스터디 (97)
      • 코딩테스트 준비 스터디 (68)
      • 모의 테스트 스터디 (1)
    • Koala - 8기 (44)
      • 기초 알고리즘 스터디 (32)
      • 코딩테스트 준비 스터디 (10)
      • 코드포스 버츄얼 스터디 (0)
      • 프로그래머스 LV2 스터디 (0)
    • Koala - 9기 (205)
      • 기초 알고리즘 스터디 (138)
      • 코딩테스트 준비 스터디 (64)
      • 모의테스트 준비 스터디 (1)
    • Koala - 10기 (117)
      • 기초 알고리즘 스터디 (30)
      • 코딩테스트 준비 스터디 (86)
      • 모의테스트 준비 스터디 (1)
    • Koala - 11기 (151)
      • 기초 알고리즘 스터디 (46)
      • 코딩테스트 준비 스터디 (104)
      • 모의테스트 준비 스터디 (1)
    • Koala - 12기 (86)
      • 기초 알고리즘 스터디 (31)
      • 코딩테스트 준비 스터디 (55)
    • Koala - 13기 (119)
      • 기초 알고리즘 스터디 (52)
      • 코딩테스트 준비 스터디 (67)
    • Koala - 14기 (116)
      • 기초 알고리즘 스터디 (39)
      • 코딩테스트 준비 스터디 (77)
    • Koala - 15기 (138)
      • 기초 알고리즘 스터디 (73)
      • 코딩테스트 준비 스터디 (65)
    • Koala - 16기 (47)
      • 코딩테스트 기초 스터디 (16)
      • 코딩테스트 심화 스터디 (31)
    • Koala - 17기 (62)
      • 코딩테스트 기초 스터디 (15)
      • 코딩테스트 심화 스터디 (47)
    • Koala - 18기 (31)
      • 코딩테스트 기초 스터디 (11)
      • 코딩테스트 심화 스터디 (20)
    • Koala - 19기 (43)
      • 코딩테스트 기초 스터디 (7)
      • 코딩테스트 심화 스터디 (36)
    • Koala - 20기 (0)
      • 코딩테스트 기초 스터디 (0)
      • 코딩테스트 심화 스터디 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 🐨항공대 알고리즘 학회 Koala 3기 모집
  • 🐨항공대 알고리즘 학회 Koala 2기 모집
  • 소모임 소개

인기 글

태그

  • 백트래킹
  • 백준
  • dfs
  • BFS
  • BOJ
  • dp
  • 파이썬
  • C++

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.3.0
KauKoala
[백준/Python] MooTube (Silver) 15591번
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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