[Programmers] Level 2. 도넛과 막대 그래프

2025. 2. 12. 22:17·코딩테스트/Python
728x90
반응형

🔗 Problem Link

 

프로그래머스

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

programmers.co.kr


❔Thinking

  • 사이클을 이루는 도넛모양 그래프, 한줄로 이어진 막대 그래프, 동일한 도넛 모양 2개가 이어진 8자 모양 그래프의 각 개수를 반환한다.
  • 그래프를 이루는 정점 이외에 하나의 생성점이 각 그래프와 연결되어 있고, 이 생성점도 찾아 반환한다.

💻Solution

from collections import defaultdict, deque

def solution(edges):
    answer = [0, 0, 0, 0]
    start, donut, bar, eight = 0, 1, 2, 3
    graph = defaultdict(list)
    # 0: 진출, 1: 진입
    degrees = defaultdict(lambda: [0, 0])

    for edge in edges:
        a, b = edge
        graph[a].append(b)
        degrees[a][0] += 1
        degrees[b][1] += 1

    for node, degree in degrees.items():
        outd, ind = degree

        if outd == 0:
            answer[bar] += 1
        elif outd == 2:
            if ind > 0:
                answer[eight] += 1
            else:
                answer[start] = node
                root = node
        elif outd > 2:
            answer[start] = node
            root = node

    answer[donut] = degrees[root][0] - answer[bar] - answer[eight]

    return answer

🗝️keypoint

  1. 각 그래프에서 유일하게 등장하는 정점의 특징을 파악하고, 그 특징으로 해당 그래프의 개수를 확인한다.
    1. 막대 그래프 : 마지막 정점은 진입 차수 = 1, 진출 차수 = 0이다.
    2. 8자 모양 그래프 : 진출 차수 = 2, 진입 차수 0 이상이다.
    3. 도넛 모양 그래프 : 생성점에서의 진출 차수 (=총 그래프 개수)에서 다른 두 그래프의 수를 빼면 구할 수 있다.
  2. defaultdict는 key값을 매번 확인하지 않더라도 dict에 값을 저장할 수 있고, lambda를 활용해 특정 구조를 만들 수 있다.
저작자표시

'코딩테스트 > Python' 카테고리의 다른 글

[Programmers] Level 2. 유사 칸토어 비트열  (0) 2025.02.14
[Baekjoon] 2294. 동전 2  (0) 2025.02.13
[Programmers] Level 2. 숫자 블록  (0) 2025.02.11
[Baekjoon] 2565. 전깃줄  (0) 2025.02.11
[Programmers] Level 2. 충돌위험 찾기  (0) 2025.02.09
'코딩테스트/Python' 카테고리의 다른 글
  • [Programmers] Level 2. 유사 칸토어 비트열
  • [Baekjoon] 2294. 동전 2
  • [Programmers] Level 2. 숫자 블록
  • [Baekjoon] 2565. 전깃줄
swwho
swwho
일상을 데이터화하다
  • swwho
    하루한장
    swwho
  • 전체
    오늘
    어제
    • 분류 전체보기 (188) N
      • ML_DL (39) N
        • MUJAKJUNG (무작정 시리즈) (18) N
        • 딥러닝 공부하기 (21)
      • 데이터사이언스 (1)
        • EDA (1)
        • 데이터과학을 위한 통계 (0)
      • 데이터엔지니어링 (2)
      • 논문리뷰 (2)
        • Computer Vision (2)
      • Python 활용하기 (12)
      • 코딩테스트 (127)
        • Python (109)
        • MySQL (14)
      • Git (3)
      • MySQL 활용하기 (0)
      • 일상 이야기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
swwho
[Programmers] Level 2. 도넛과 막대 그래프
상단으로

티스토리툴바