Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 알고리즘_스터디
- 그리디
- 백준
- 개인회고
- ODQA
- python3
- dp
- Level1
- 정렬
- mrc
- 알고리즘스터디
- 이진탐색
- 구현
- 최단경로
- Level2_PStage
- 부스트캠프_AITech3기
- 글또
- dfs
- 이코테
- 파이썬 3
- 그래프이론
- 주간회고
- 기술면접
- 단계별문제풀이
- 부스트캠프_AITech_3기
- 프로그래머스
- U_stage
- 백트랙킹
- Level2
- 다시보기
Archives
- Today
- Total
국문과 유목민
[최단경로] 숨바꼭질 본문
"이것이 코딩테스트다(나동빈 저)"에서 나온 문제에 대한 코드를 다루고 있습니다.
문제에 대한 구체적인 설명과 조건 등은 책을 참고해주시기 바랍니다.
소요시간: 40분
1. 문제 설명
- 숨바꼭질을 하는데 술래는 1에서 출발한다. 이때 계산 결과 1번에서 다른 노드의 최단거리 중 술래와 가장 먼 거리에 숨으면 가장 괜찮다는 것을 알아넀다. 그래서 숨는 위치, 가장 먼 최단거리, 이와 같은 값을 가지는 노드의 개수를 출력하는 문제
2. 접근 방식
- 다익스트라 알고리즘을 활용한다.
- 단, 단방향이 아닌 양방향이기 때문에 input을 받을 때 그래프를 양방향에서 받는 느낌으로 넣어줘야 한다. a, b가 (input)으로 들어온다면, graph[a].append(b), graph[b].append(a) 둘 다 넣어줘야 한다.
3. 코드
import heapq
n, m = map(int, input().split())
INF = 1e9
graph = [[] for i in range(n+1)]
for _ in range(m):
a, b = map(int, input().split())
graph[a].append(b)
graph[b].append(a)
def dijkstra(start):
distance = [INF] *(n+1)
q = [(0, start)]
distance[start] = 0
while q:
dist, node = heapq.heappop(q)
if distance[node] < dist:
continue
for next_node in graph[node]:
cost = dist + 1
if cost < distance[next_node]:
distance[next_node] = cost
heapq.heappush(q, (distance[next_node], next_node))
return distance
dist = dijkstra(1)
answer = list(map(lambda x: -1 if x == INF else x, dist))
tmp =[]
b = max(answer) # 헛간과의 거리
for i in range(1, n+1):
if answer[i] == b:
tmp.append(i)
a = sorted(tmp)[0]
c = len(tmp)
print(a, b, c)
4. 코멘트
- 오랜만에 내 힘으로 온전히 문제를 해결한 거 같아서 내심 뿌듯했다. 물론 알고리즘을 조금 참고하기는 했지만, 그래도 예전보다는 많이 나아진 것 같다.(예전에는 흐름도 이해하기 힘들었기에...)
- 문제를 푸는데 처음에는 양방향 그래프라는 것을 고려 안해서 문제가 있었지만 잘 해결했다는 점에서 스스로 대견하다.
'알고리즘_코딩테스트 > 이것이 코딩테스트다' 카테고리의 다른 글
[그래프이론] 탑승구 (0) | 2021.12.27 |
---|---|
[그래프이론] 어두운 길 (0) | 2021.12.27 |
[최단경로] 화성탐사 (0) | 2021.12.23 |
[최단경로] 정확한 순위 (0) | 2021.12.22 |
[최단경로] 플로이드 (0) | 2021.12.22 |