공부하고 기록하는, 경제학과 출신 개발자의 노트

프로그래밍/코딩테스트 문제풀이

[Python] 프로그래머스. 가장 먼 노드 (Level 3)

inspirit941 2019. 10. 30. 22:18
반응형

 

https://programmers.co.kr/learn/courses/30/lessons/49189

 

코딩테스트 연습 - 가장 먼 노드 | 프로그래머스

6 [[3, 6], [4, 3], [3, 2], [1, 3], [1, 2], [2, 4], [5, 2]] 3

programmers.co.kr

주어진 노드를 토대로 n * n Matrix를 생성할 경우 시간초과가 걸리는 문제.

BFS 코드의 효율성보다는 주어진 노드 데이터를 적은 연산비용이 들어가도록 하는 게 관건이었던...

 

 

 

시간초과가 뜨던 코드는 아래와 같았다.

from collections import deque, defaultdict

def bfs(start, maps, visited):
    queue = deque()
    queue.append((start, 0))
    numbers = defaultdict(lambda: 0)
    while queue:
        # print(queue)
        y, cnt = queue.popleft()
        visited[y] = 1
        for x in range(1, len(maps)):
            if visited[x] == 0 and maps[y][x] == 1:
                visited[x] = 1
                queue.append((x, cnt+1))
                numbers[cnt+1] += 1
                
    return numbers[cnt]

def solution(n, edge):
    maps = [[0 for _ in range(n+1)] for _ in range(n+1)]
    for y, x in edge:
        maps[y][x], maps[x][y] = 1, 1
    visited = [0 for _ in range(n+1)]
    return bfs(1, maps, visited)
반응형