[BaekJoon] 보석 도둑 - 1202 (Gold II, Python3)
문제 링크 1202번: 보석 도둑 첫째 줄에 N과 K가 주어진다. (1 ≤ N, K ≤ 300,000) 다음 N개 줄에는 각 보석의 정보 Mi와 Vi가 주어진다. (0 ≤ Mi, Vi ≤ 1,000,000) 다음 K개 줄에는 가방에 담을 수 있는 최대 무게 Ci가 주어진다. (1 ≤ Ci www.acmicpc.net 성능 요약 메모리: 106592 KB, 시간: 2180 ms 분류 자료 구조, 그리디 알고리즘, 우선순위 큐, 정렬 제출 일자 2024년 3월 28일 17:51:01 문제 설명 세계적인 도둑 상덕이는 보석점을 털기로 결심했다. 상덕이가 털 보석점에는 보석이 총 N개 있다. 각 보석은 무게 Mi와 가격 Vi를 가지고 있다. 상덕이는 가방을 K개 가지고 있고, 각 가방에 담을 수 있는 최대 무게..
2024. 4. 22.
[BaekJoon] 타임머신 - 11657 (Gold IV, Python3)
문제 링크 성능 요약 메모리: 32140 KB, 시간: 736 ms 분류 벨만–포드, 그래프 이론, 최단 경로 제출 일자 2024년 3월 29일 13:51:37 문제 설명 N개의 도시가 있다. 그리고 한 도시에서 출발하여 다른 도시에 도착하는 버스가 M개 있다. 각 버스는 A, B, C로 나타낼 수 있는데, A는 시작도시, B는 도착도시, C는 버스를 타고 이동하는데 걸리는 시간이다. 시간 C가 양수가 아닌 경우가 있다. C = 0인 경우는 순간 이동을 하는 경우, C < 0인 경우는 타임머신으로 시간을 되돌아가는 경우이다. 1번 도시에서 출발해서 나머지 도시로 가는 가장 빠른 시간을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 도시의 개수 N (1 ≤ N ≤ 500), 버스 노선의 개수 M (1 ≤ ..
2024. 4. 22.
[BaekJoon] LCA - 11437 (Gold III, Python3)
문제 링크 성능 요약 메모리: 273764 KB, 시간: 1044 ms 분류 그래프 이론, 최소 공통 조상, 트리 제출 일자 2024년 3월 29일 16:40:19 문제 설명 N(2 ≤ N ≤ 50,000)개의 정점으로 이루어진 트리가 주어진다. 트리의 각 정점은 1번부터 N번까지 번호가 매겨져 있으며, 루트는 1번이다. 두 노드의 쌍 M(1 ≤ M ≤ 10,000)개가 주어졌을 때, 두 노드의 가장 가까운 공통 조상이 몇 번인지 출력한다. 입력 첫째 줄에 노드의 개수 N이 주어지고, 다음 N-1개 줄에는 트리 상에서 연결된 두 정점이 주어진다. 그 다음 줄에는 가장 가까운 공통 조상을 알고싶은 쌍의 개수 M이 주어지고, 다음 M개 줄에는 정점 쌍이 주어진다. 출력 M개의 줄에 차례대로 입력받은 두 정점..
2024. 4. 22.
[BaekJoon] 거의 소수 - 1456 (Python3, Gold V)
문제 링크 1456번: 거의 소수 어떤 수가 소수의 N제곱(N ≥ 2) 꼴일 때, 그 수를 거의 소수라고 한다. 두 정수 A와 B가 주어지면, A보다 크거나 같고, B보다 작거나 같은 거의 소수가 몇 개인지 출력한다. www.acmicpc.net 성능 요약 메모리: 111368 KB, 시간: 2920 ms 분류 수학, 정수론, 소수 판정, 에라토스테네스의 체 제출 일자 2024년 4월 15일 17:09:48 문제 설명 어떤 수가 소수의 N제곱(N ≥ 2) 꼴일 때, 그 수를 거의 소수라고 한다. 두 정수 A와 B가 주어지면, A보다 크거나 같고, B보다 작거나 같은 거의 소수가 몇 개인지 출력한다. 입력 첫째 줄에 왼쪽 범위 A와 오른쪽 범위 B가 공백 한 칸을 사이에 두고 주어진다. 출력 첫째 줄에 총..
2024. 4. 22.
[이취코] 미래도시 (Python3)
Problem: 최단 경로 알고리즘 - 플로이드워셜 (FLoyd-Warshall) 플로이드 워셜을 적용한 코드 INF = int(1e9) n, m = map(int, input().split()) graph = [[INF] * (n+1) for i in range(n+1)] # 자기 자신인 경우, 0으로 초기화 for a in range(1, n+1): for b in range(1, n+1): if a == b: graph[a][b] = 0 # 간선에 대한 정보, 거리는 다 1로 초기화 for _ in range(m): a, b = map(int, input().split()) graph[a][b] = 1 graph[b][a] = 1 x, k = map(int, input().split()) # 플로이..
2024. 3. 6.