Post

[프로그래머스] 도넛과 막대 그래프 파이썬

문제


  • 프로그래머스 도넛과 막대 그래프 (LV2)

프로그래머스 도넛과 막대 그래프

처음 문제를 읽었을 때, 도대체 어떻게 접근을 해야할지 감이 잡히지 않았다.
생성한 정점은 어떻게 찾아야 하고 또 도넛 모양과 8자 모양 그래프를 어떤 기준으로 구분해야 될지 감이 안잡혔다.

SCR-20241108-njqi

내 코드


우선은 무작정 그래프 탐색을 돌면서 문제를 해결해보려고 했다.
구현해보다가 뭔가 접근 방법부터 잘못된 느낌이 들었다.
도무지 감이 오지 않아서 힌트를 찾다가 아래 글을 보았다.
SCR-20241108-nmga 대단한 접근법이었다.
아마 카카오도 그래프 탐색보단 이러한 의도로 해결하는 것을 의도하고 문제를 내진 않았을까 생각이 들었다.
해당 아이디어를 코드로 구현하여서 제출하니 바로 해결되었다.
정점의 번호가 1부터 연속되는 수라는 제한이 없어서 이를 반영하여서 구현하였는데 그럴 필요는 없는 것 같았다.

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
def solution(edges):
    answer = [0, 0, 0, 0]
    graph = {}
    
    for v in edges:
        if v[0] in graph:
            graph[v[0]][0] += 1
        else:
            graph[v[0]] = [1, 0]
        
        if v[1] in graph:
            graph[v[1]][1] += 1
        else:
            graph[v[1]] = [0, 1]
    
    for key in graph.keys():
        if graph[key][0] == 0:
            answer[2] += 1
        elif graph[key][0] == 2:
            if graph[key][1] > 0:
                answer[3] += 1
            else:
                answer[0] = key
        elif graph[key][0] > 2:
            answer[0] = key
            
    answer[1] = graph[answer[0]][0] - answer[2] - answer[3]
    
    return answer

day12

문제를 보고 적절한 접근법을 떠올리기 위한 시야를 늘려야겠다는 생각이 들었다.
결국은 많은 문제를 풀어야 할 것 같다.

This post is licensed under CC BY 4.0 by the author.