강의로 돌아가기
Sondho

테스트 케이스 추가 요청

연결된 정점이 가장 많은 정점을 생성한 정점으로 생각하고 풀었습니다.

입출력 예 #2를 기준으로
{4: [11, 2, 8], 1: [12], 8: [3], 12: [7], 7: [11], 9: [6], 10: [11], 6: [10], 3: [5, 8], 11: [1, 9], 5: [3]}
4가 [11, 2, 8]로 3개가 연결되었기 때문에 생성한 정점이라고 판단했습니다.

하지만 도넛 모양 그래프, 막대 모양 그래프, 8자 모양 그래프의 수의 합은 2이상입니다. 라는 조건에 맞춰서 [4, 2]를 제거해 도넛 모양 그래프 2개만 남기게 되면 아래와 같이 연결되는데
{1: [12], 8: [3], 12: [7], 7: [11], 9: [6], 10: [11], 6: [10], 3: [5, 8], 11: [1, 9], 5: [3], 4: [11, 8]}
이 때, 가장 많이 연결된 정점은 3, 11, 4 세 개가 되고, 입력 순서를 요청한 테스트 케이스와 같이 바꾸면 실패하게 됩니다.

요청하는 테스트 케이스 1

edges(int[][]): [[1, 12], [8, 3], [12, 7], [7, 11], [9, 6], [10, 11], [6, 10], [3, 5], [11, 1], [5, 3], [11, 9], [3, 8], [4, 11], [4, 8]]
Return: [4, 0, 0, 2]

입출력 예#2 에서 [4, 2]를 제외한 테스트 케이스가 실패해도 통과되네요.

요청하는 테스트 케이스 2

edges(int[][]): [[4, 11], [1, 12], [8, 3], [12, 7], [7, 11], [4, 8], [9, 6], [10, 11], [6, 10], [3, 5], [11, 1], [5, 3], [11, 9], [3, 8]]
Return: [4, 0, 0, 2]
작성중인 코드―solution.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from enum import Enum

class GraphType(Enum):
    DOUGHNUT = 1
    STICK = 2
    FIGURE_OF_EIGHT = 3


def get_graph_type(edge_frequency, start_edge):
    queue = [start_edge]
    linked_edges = set()
    linked_count = -1
    while queue:
        from_edge = queue.pop()
        linked_edges.add(from_edge)
        linked_count += 1
        if from_edge in edge_frequency.keys():
            queue.extend(edge_frequency.get(from_edge))
            edge_frequency.pop(from_edge)
    edge_count = len(linked_edges)
    if edge_count == linked_count:
        return GraphType.DOUGHNUT.value
    if edge_count == linked_count + 1:
        return GraphType.STICK.value
    if edge_count == linked_count - 1:
        return GraphType.FIGURE_OF_EIGHT.value
    return 0

def solution(edges):
    answer = [0, 0, 0, 0]
    edge_frequency = dict()
    for from_edge, to_edge in edges:
        edge_frequency.setdefault(from_edge, []).append(to_edge)
    answer[0] = max(edge_frequency.items(), key=lambda x: len(x[1]))[0]
    for start_edge in edge_frequency.pop(answer[0]):
        graph_type = get_graph_type(edge_frequency, start_edge)
        answer[graph_type] += 1
    return answer
1 개의 답변
선지훈

하... 이거 테스트케이스 추가되었네요...
이거 못 봤으면 영원히 못찾을 뻔 헀습니다.
테스트 35에서만 실패가 뜬다면 이거 한번 참고하세요.

확실히 차례로 올라가는 숫자가 아닌 서로 다른 숫자라고만 명기되어있기는 하지만 뭔가 허탈하네요

  • Sondho

    오.. 맞습니다. 요청을 통해 담당 부서로 전달됐고 두 테스트 케이스 모두 추가 완료 되었다는 메일을 받았습니다!

    Sondho―2024.03.14 23:22
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.