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

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

페이지 맨 위로 올라가기

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

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

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

  • 2025.04.02 23:25
  • Programming/프로그래머스
글 작성자: pental

https://school.programmers.co.kr/learn/courses/30/lessons/86971?language=python3

 

프로그래머스

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

programmers.co.kr

풀이

BFS + 완전탐색 방식의 풀이로 작성하였다. 각 연결을 하나씩 끊어보면서 두 전력망의 노드 수 차이의 최소값을 구하는 방식이다.

문제에서 요구하는 사항은

  1. 하나의 연결을 끊어 전력망을 두개로 나누었을때,
  2. 두 전력망 송전탑 개수 찾이의 최소값을 반환하는 문제이다.

BFS 코드는 너무 단순하기 때문에 간단하게 설명하면, 하나의 연결 그래프에서 시작 노드 S로부터 BFS를 수행하여 연결된 노드의 개수를 세는 함수로 칭한다.

전체적인 로직은 다음과 같다.

  1. wires에서 하나의 간선을 끊어본다.
  2. 끊어진 상태의 그래프를 만든다.
  3. BFS를 통해 연결된 송전탑 수를 센다.
  4. 반대편 송전탑 수는 n - count
  5. 두 전력망의 차이의 최소값을 갱신한다.

시간 복잡도 분석

  • O(E * (V + E))

코드

from collections import deque

def bfs(G, S, V) :
    queue = deque([S])
    V[S] = True
    count = 0
    while queue :
        v = queue.popleft()
        count += 1
        for i in G[v] :
            if not V[i] :
                queue.append(i)
                V[i] = True
    return count

def solution(n, wires):
    answer = n - 2
    for i in range(len(wires)) :
        tmps = wires.copy()
        G = [[] for i in range(n + 1)]
        V = [False] * (n + 1)
        tmps.pop(i)
        for wire in tmps :
            x, y = wire
            G[x].append(y)
            G[y].append(x)
        for index, graph in enumerate(G) :
            if graph != [] :
                S = index
                break
        counts = bfs(G, S, V)
        other = n - counts
        if abs(counts - other) < answer :
            answer = abs(counts - other)
    return answer

500등 안에 들때까지,,

저작자표시 비영리

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

[Level 3] 프로그래머스 - 가장 먼 노드  (0) 2025.05.04
[Level 3] 프로그래머스 - 스티커 모으기(2)  (0) 2025.05.04
프로그래머스 - [Level 2] 숫자 카드 나누기 (파이썬)  (0) 2025.04.02
프로그래머스 - 배달 (파이썬)  (0) 2025.03.30
프로그래머스 - 마법의 엘리베이터 (파이썬)  (0) 2025.03.29

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [Level 3] 프로그래머스 - 가장 먼 노드

    [Level 3] 프로그래머스 - 가장 먼 노드

    2025.05.04
  • [Level 3] 프로그래머스 - 스티커 모으기(2)

    [Level 3] 프로그래머스 - 스티커 모으기(2)

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

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

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

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

    2025.03.30
다른 글 더 둘러보기

정보

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

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

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

검색

메뉴

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

카테고리

  • Category (426) N
    • Forensics (103)
      • Magnet AXIOM (28)
      • Digital Forensics Informati.. (9)
      • Iphone Forensics (22)
      • 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 (237) N
      • C (10)
      • Python (11)
      • 백준 (183) N
      • 프로그래머스 (32)
    • 그냥 개발 및 잡담 (16)
      • Docker (2)
      • Google Cloud (3)
      • OS 개발 (3)
    • Best of Best (20)

최근 글

인기 글

댓글

공지사항

아카이브

태그

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

정보

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

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

pental

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

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

티스토리

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

티스토리툴바