이 영역을 누르면 첫 페이지로 이동
포렌식 & 개발 이야기 - Forensics & Development 블로그의 첫 페이지로 이동

포렌식 & 개발 이야기 - Forensics & Development

페이지 맨 위로 올라가기

포렌식 & 개발 이야기 - Forensics & Development

Pental - Forensics / iOS / Windows / Android / Kakaotalk / Telegram / Etc

프로그래머스 - 배달 (파이썬)

  • 2025.03.30 02:08
  • Programming/프로그래머스
글 작성자: pental

https://school.programmers.co.kr/learn/courses/30/lessons/12978

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

풀이

N개의 마을(1번부터 N번), roads는 [마을 A, 마을 B, 걸리는 시간] 형태의 리스트고, 음식 배달은 1번 마을에서 시작한다.

K시간 이하로 배달 가능한 마을 수를 구해야한다.

1번 마을을 시작점으로 해서 모든 마을까지의 최단 거리를 구한다. 여기서는 다익스트라 알고리즘을 사용한다.

구한 거리 중에서 K이하인 마을 개수를 세면 정답이다.

시간 복잡도 분석

도로수 E, 마을 수 N

즉, O((N + E) Log N)

코드

import heapq
from collections import defaultdict

def solution(N, road, K):
    G = defaultdict(list)
    for a, b, cost in road :
        G[a].append((b, cost))
        G[b].append((a, cost))
    
    dist = [float('inf')] * (N + 1)
    dist[1] = 0
    
    heap = [(0, 1)]
    while heap :
        curr_dist, curr_node = heapq.heappop(heap)
        
        if curr_dist > dist[curr_node] :
            continue
        
        for neighbor, weight in G[curr_node] :
            distance = curr_dist + weight
            if distance < dist[neighbor] :
                dist[neighbor] = distance
                heapq.heappush(heap, (distance, neighbor))
        
    return sum(1 for d in dist if d <= K)
저작자표시 비영리

'Programming > 프로그래머스' 카테고리의 다른 글

프로그래머스 - [Level 2] 전력망을 둘로 나누기 (파이썬)  (1) 2025.04.02
프로그래머스 - [Level 2] 숫자 카드 나누기 (파이썬)  (0) 2025.04.02
프로그래머스 - 마법의 엘리베이터 (파이썬)  (0) 2025.03.29
프로그래머스 - 택배 상자 꺼내기 (파이썬)  (0) 2025.03.26
[프로그래머스] 달리기 경주  (2) 2025.03.24

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 프로그래머스 - [Level 2] 전력망을 둘로 나누기 (파이썬)

    프로그래머스 - [Level 2] 전력망을 둘로 나누기 (파이썬)

    2025.04.02
  • 프로그래머스 - [Level 2] 숫자 카드 나누기 (파이썬)

    프로그래머스 - [Level 2] 숫자 카드 나누기 (파이썬)

    2025.04.02
  • 프로그래머스 - 마법의 엘리베이터 (파이썬)

    프로그래머스 - 마법의 엘리베이터 (파이썬)

    2025.03.29
  • 프로그래머스 - 택배 상자 꺼내기 (파이썬)

    프로그래머스 - 택배 상자 꺼내기 (파이썬)

    2025.03.26
다른 글 더 둘러보기

정보

포렌식 & 개발 이야기 - Forensics & Development 블로그의 첫 페이지로 이동

포렌식 & 개발 이야기 - Forensics & Development

  • 포렌식 & 개발 이야기 - Forensics & Development의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

카테고리

  • Category (433) N
    • Forensics (104) N
      • Magnet AXIOM (28)
      • Digital Forensics Informati.. (9)
      • Iphone Forensics (23) N
      • DFC (7)
      • 디지털포렌식전문가2급 자격증 (10)
      • FTK ACE 자격증 (7)
    • 이것저것 (18)
      • Ubuntu (6)
      • 디스코드 봇 (4)
      • Volatility GUI (2)
    • CTF (32)
      • NEWSECU (14)
      • CTF-d (5)
      • Puzzel - Network Forensics (2)
      • Security Traps (2)
      • system32.kr (5)
      • HMCTF (4)
    • Programming (243) N
      • C (10)
      • Python (11)
      • 백준 (189) N
      • 프로그래머스 (32)
    • 그냥 개발 및 잡담 (16)
      • Docker (2)
      • Google Cloud (3)
      • OS 개발 (3)
    • Best of Best (20)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • axiom
  • 파이썬
  • 프로그래머스
  • 포렌식
  • 백준
  • Forensics
  • 디지털포렌식
  • pental
  • 전체 보기…

정보

pental의 포렌식 & 개발 이야기 - Forensics & Development

포렌식 & 개발 이야기 - Forensics & Development

pental

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © pental.

티스토리툴바