목록코딩 테스트/백준 문제 풀이 (102)
공부 기록장
https://www.acmicpc.net/problem/17298 코드from collections import dequeimport sysinput = sys.stdin.readlinen =int(input())num = list(map(int, input().split()))ans = [-1] * nstack = deque()for i in range(n): while stack and num[stack[-1]] 접근 방법- 문제 자체는 단순하고 쉬워보이지만, 수열의 크기가 최대 백만일 수 있기 때문에 시간 복잡도를 고려해야 한다- 현재 값을 기준으로 더 큰 값을 '효율적으로' 찾을 방법이 필요하다- 순차적으로 배열을 처리하면서, 특정 조건을 만족하는 경우 값을 처리하는 자료구조로 "스택"을..
https://www.acmicpc.net/problem/11779 코드import heapqimport sysINF = int(1e9)input = sys.stdin.readlinen = int(input())m = int(input())graph = [[] for _ in range(n+1)]for _ in range(m): s, e, c = map(int, input().split()) graph[s].append([e, c])a, b = map(int, input().split())dist = [INF] * (n+1)prev_node = [0] * (n+1) # 최단 경로 출력을 위한 변수def dijkstra(a): q = [] heapq.heappush(q, (0, ..
https://www.acmicpc.net/problem/1238 코드# 다익스트라 두 번 쓰는 풀이import heapqINF = int(1e9)def dijkstra(start): distance = [INF] * (N+1) distance[start] = 0 q = [] heapq.heappush(q, (0, start)) while q: dist, now = heapq.heappop(q) if distance[now] 접근 방법- 플로이드 워셜로 풀면 되겠다고 생각했지만 시간 초과- N이 최대값인 경우 10억번의 연산이 필요하게 되고, 시간 초과 발생- 다익스트라를 2번 사용하는 풀이 참고 배운 점- 플로이드 워셜을 복습할 수 있었다- 다익스트..
https://www.acmicpc.net/problem/1916 코드import sysimport heapqinput = sys.stdin.readlineINF = int(1e9)n = int(input())m = int(input())graph = [[] for _ in range(n+1)]distance = [INF] * (n+1)for _ in range(m): a, b, c = map(int, input().split()) graph[a].append((b, c))start, end = map(int, input().split())def dijkstra(start): q = [] heapq.heappush(q, (0, start)) distance[start] = 0 ..