코테(90)
-
숨바꼭질 코드 및 해설 (파이썬)
출처: 이것이 취업을 위한 코딩 테스트다 with 파이썬, Q 40, p 390 프로그래머스의 가장 먼 노드 문제와 매우 유사한 문제였습니다. 마찬가지로 다익스트라 알고리즘으로 풀이했습니다. 다익스트라 알고리즘 코드대로 graph, distance를 초기화하고 입력에 맞게 graph 정보를 저장했습니다. 헛간을 잇는 통로가 양방향이고, weight가 따로 없기 때문에 이 부분만 기존 코드를 수정했습니다. 이후 다익스트라 알고리즘을 실행하여 distance를 구한 뒤, 가장 먼 헛간의 최단거리만큼 떨어진 헛간들 중 헛간 번호가 가장 작은 것, 가장 먼 헛간의 최단거리, 가장 먼 헛간의 최단거리만큼 떨어진 헛간들의 개수를 순서대로 반환했습니다. import sys import heapq INF = int(1..
2021.07.08 -
화성 탐사 코드 및 해설 (파이썬)
출처: 이것이 취업을 위한 코딩 테스트다 with 파이썬, Q 39, p 388 다익스트라 알고리즘을 활용해 풀이했습니다. 우선 입력을 받아 하나의 테스트 케이스는 N*N 리스트로 정리하고, 각 테스트 케이스를 spaces라는 리스트에 저장했습니다. 화성 탐사 기계는 상하좌우 인접한 곳으로 1칸씩 이동할 수 있다고 했으므로, 그래프의 인접한 노드 대신 상하좌우의 좌표를 탐색하며 풀이했습니다. 이때 N*N 리스트 밖으로 나가 IndexError가 발생하는 것을 방지하기 위해 인덱스가 0~N-1 사이인지 확인해주었습니다. 마지막으로 가장 위 칸인 (0,0)을 지나는데도 에너지가 소모되므로, 다익스트라 알고리즘이 끝난 후에 (0,0)을 지나는데 소모되는 에너지를 더해주었습니다. import fileinput ..
2021.07.07 -
정확한 순위 코드 및 해설 (파이썬)
출처: 이것이 취업을 위한 코딩 테스트다 with 파이썬, Q 38, p 386 플로이드 워샬 알고리즘을 활용해 풀이했습니다. 현재 학생을 제외한 나머지 학생들이 현재 학생보다 성적이 낮은지, 높은지 모두 알면 그 학생의 정확한 순위를 알 수 있습니다. A번 학생의 성적이 B번 학생보다 낮다면 화살표가 A에서 B를 가리키도록 하면, 플로이드 워샬 알고리즘 수행 후 그래프의 n번째 가로줄(행)에 INF가 아닌 숫자가 있으면 그 인덱스의 학생은 n번째 학생보다 성적이 높다는 의미입니다. n번째 세로줄(열)에 INF가 아닌 숫자가 있으면, 그 인덱스의 학생은 n번째 학생보다 성적이 낮다는 의미입니다. 따라서 n번째 행과 열에서 INF가 아닌 값을 가지는 인덱스 + 자기 자신의 인덱스(n)을 합쳤을 때, 1 ~..
2021.07.06 -
프로그래머스 배달 코드 및 해설 (파이썬)
https://programmers.co.kr/learn/courses/30/lessons/12978 코딩테스트 연습 - 배달 5 [[1,2,1],[2,3,3],[5,2,2],[1,4,2],[5,3,1],[5,4,2]] 3 4 6 [[1,2,1],[1,3,2],[2,3,2],[3,4,3],[3,5,2],[3,5,3],[5,6,1]] 4 4 programmers.co.kr 2가지 수정사항을 제외하고 다익스트라 알고리즘을 그대로 활용해 풀이했습니다. (1) 하나의 도로에서 양방향으로 이동 가능하므로, graph를 만들 때 양방향 정보를 모두 저장했습니다 (2) 마지막에 답을 구할 때 주어진 K 이하의 시간이 걸리는 마을의 개수를 세서 반환했습니다. import heapq def solution(N, road..
2021.07.05 -
백준 플로이드 코드 및 해설 (파이썬)
https://www.acmicpc.net/problem/11404 11404번: 플로이드 첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 www.acmicpc.net 2가지 수정사항을 제외하고 플로이드 워셜 구현 코드를 그대로 활용했습니다. (1) 시작 도시와 도착 도시를 연결하는 노선이 여러 개일 수 있다고 했으므로, 여러 개의 노선 중 최솟값만 저장하도록 수정해주었고, (2) 마지막에 결과를 프린트할 때 INFINITY 대신 0을 프린트하도록 수정했습니다. import sys INF = int(1e9) # 입력 받아오기 inputs = list(map(in..
2021.07.05 -
최단 경로
1. (개선된) 다익스트라 알고리즘 - 한 지점에서 다른 특정 지점까지의 최단 경로를 구해야 하는 경우 - 각 노드에 대한 현재까지의 최단 거리를 계속 갱신 import heapq import sys INF = int(1e9) # n: 노드의 개수 # m: 간선의 개수 # start: 시작 노드의 번호 # 각 노드에 연결되어 있는 노드에 대한 정보를 담는 리스트 초기화 graph = [[] for i in range(n+1)] # 최단 거리 테이블을 모두 무한으로 초기화 distance = [INF] * (n+1) # a, b, c: a번 노드에서 b번 노드로 가는 비용이 c for _ in range(m): graph[a].append((b,c)) def dijkstra(start): q = [] # ..
2021.07.05