본문 바로가기

알고리즘/🥇 골드

(72)
백준 14567 선수과목 (Prerequisite) 파이썬 풀이 난이도 : 골드5 풀이일 : 2405013 https://www.acmicpc.net/problem/14567문제 캡쳐아이디어각 과목을 수강하기 전에 이수하여야 하는 선수 과목의 수를 센다.선수 과목이 없는 과목에 대해, 해당 과목을 이수한 후 수강할 수 있는 과목들의 선수과목 수를 줄인다.선수 과목이 남아있지 않은 과목들은 몇 번째 학기에 들을 수 있는지 기록한다.전체 풀이코드import sys from collections import deque N, M = map(int, sys.stdin.readline().split()) order = [1] * N # 수강 가능한 학기 previous = [0] * (N + 1) # 선수과목의 수 after = [[] for _ in range(N + 1)] ..
백준 7579 앱 파이썬 풀이 난이도 : 골드3풀이일 : 2404254https://www.acmicpc.net/problem/7579 7579번: 앱입력은 3줄로 이루어져 있다. 첫 줄에는 정수 N과 M이 공백문자로 구분되어 주어지며, 둘째 줄과 셋째 줄에는 각각 N개의 정수가 공백문자로 구분되어 주어진다. 둘째 줄의 N개의 정수는 현재 활www.acmicpc.net문제캡쳐아이디어dp를 활용한다.주어진 모든 비용의 합 크기로 dp 배열을 생성하고, 각 비용에서 확보할 수 있는 최대 메모리를 기록한다.같은 비용을 가지는 앱이 있으므로, dp는 뒤에서부터 탐색한다.dp 갱신 시, 목표 메모리가 확보되는 가장 작은 수를 기록해 마지막에 출력한다.전체 풀이코드import sysN, M = map(int, sys.stdin.readline(..
백준 15486 퇴사 2 파이썬 풀이 난이도 : 골드5 풀이일 : 2404243 https://www.acmicpc.net/problem/15486 15486번: 퇴사 2 첫째 줄에 N (1 ≤ N ≤ 1,500,000)이 주어진다. 둘째 줄부터 N개의 줄에 Ti와 Pi가 공백으로 구분되어서 주어지며, 1일부터 N일까지 순서대로 주어진다. (1 ≤ Ti ≤ 50, 1 ≤ Pi ≤ 1,000) www.acmicpc.net 문제 캡쳐 전체 풀이코드 import sys N = int(sys.stdin.readline()) counsel = [(0, 0)] # 상담정보 dp = [0] * (N + 1) # 각 일자의 최고 금액 for _ in range(N): day, money = map(int, sys.stdin.readline().split(..
백준 2470 두 용액 파이썬 풀이 난이도 : 골드5 풀이일 : 2404221 https://www.acmicpc.net/problem/2470 2470번: 두 용액 첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00 www.acmicpc.net 문제 캡쳐 아이디어 용액을 정렬한다. 가장 왼쪽과 가장 오른쪽 용액을 초기 값으로 두고, 두 용액의 합을 저장된 값과 비교한다. 두 용액 합의 절댓값이 저장된 값보다 작으면, 저장된 값과 현재 인덱스를 저장한다. 두 용액의 합이 음수라면 front를 오른쪽으로 움직이고, 양수라면 rear를 왼쪽으로 움직인다. 반복문 종료..
백준 1976 여행 가자 파이썬 풀이 난이도 : 골드4 풀이일 : 2404173 https://www.acmicpc.net/problem/1976 1976번: 여행 가자 동혁이는 친구들과 함께 여행을 가려고 한다. 한국에는 도시가 N개 있고 임의의 두 도시 사이에 길이 있을 수도, 없을 수도 있다. 동혁이의 여행 일정이 주어졌을 때, 이 여행 경로가 가능한 것인 www.acmicpc.net 문제 캡쳐 아이디어 연결되어 있지 않은 도시가 있는지 확인하는 문제이므로, union-find 알고리즘을 통해 연결 여부를 확인한다. 여행하고자 하는 도시들에 대해 연결상태를 확인하고 연결되지 않은 도시가 있는 경우, NO를 출력하고 확인을 중단한다. 여행하고자 하는 모든 도시가 연결되어 있어 중간에 중단되지 않은 경우에는 YES를 출력한다. 전체 풀이코..
백준 13023 ABCDE 파이썬 풀이, 반례 난이도 : 골드5 풀이일 : 2404151 https://www.acmicpc.net/problem/13023 13023번: ABCDE 문제의 조건에 맞는 A, B, C, D, E가 존재하면 1을 없으면 0을 출력한다. www.acmicpc.net 문제 캡쳐 문제 이해 처음에는 싸이클을 이루지 않는 일방향 친구 관계를 찾으라는 문제라고 이해했다가, 이상해서 예시를 그려보았다. 문제에 그림도 같이 나와있으면 더 이해하기 쉬웠을텐데 아쉽다. 아이디어 한 사람부터 시작해 이미 지나온 사람을 제외하고 DFS 탐색으로 깊이 5까지 도달할 수 있는 경우가 있는지 탐색하자. 전체 풀이코드 import sys # 한 숫자에서 다섯 번 DFS 호출이 가능한지 확인 def DFS(n, depth): visited[n] =..
백준 11000 강의실 배정 파이썬 풀이 난이도 : 골드5 풀이일 : 2404114 https://www.acmicpc.net/problem/11000 11000번: 강의실 배정 첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000) 이후 N개의 줄에 Si, Ti가 주어진다. (0 ≤ Si < Ti ≤ 109) www.acmicpc.net 문제 캡쳐 아이디어 각 강의의 시작, 끝 시간을 입력받아 오름차순으로 저장한다. 매 강의 정보에 대해 이전 강의의 끝 시간이 현재 강의의 시작 시간보다 작은 것이 있는지 탐색하고, 조건에 부합하는 것이 있다면, 앞 강의를 현재 강의 배열에서 제거한다. 조건에 해당하지 않건, 해당하건 강의의 정보를 현재 강의 배열에 추가한다. 추가 후, 현재 강의 개수가 이전에 저장된 수보다 많은지 확인하고, 변수를 업..
백준 2437 저울 파이썬 풀이 난이도 : 골드2 풀이일 : 2404103 https://www.acmicpc.net/problem/2437 2437번: 저울 하나의 양팔 저울을 이용하여 물건의 무게를 측정하려고 한다. 이 저울의 양 팔의 끝에는 물건이나 추를 올려놓는 접시가 달려 있고, 양팔의 길이는 같다. 또한, 저울의 한쪽에는 저울추들만 놓 www.acmicpc.net 문제 캡쳐 아이디어 무게추의 무게만큼, 저울로 잴 수 있는 무게의 수가 늘어난다. 최초 무게 추 1 +1 : 1, 2 +2 : 1, 2, 3, 4 +3 : 1, 2, 3, 4, 5, 6, 7 +5 : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 num + 무게추 무게를 반복하다가, num < weight 순간 찾기 전체 풀이코드 import ..
백준 1881 공 바꾸기 파이썬 풀이 난이도 : 골드1 풀이일 : 2404081 https://www.acmicpc.net/problem/1881 1881번: 공 바꾸기 0부터 9까지의 숫자가 각각 적힌 열 개의 공과, 0부터 9까지의 숫자 중 하나가 적힌 여러 장의 카드들이 있다. 그리고 각각 공 하나씩을 담을 수 있는 상자 네 개가 있다. 같은 숫자의 카드는 여러 www.acmicpc.net 문제 캡쳐 아이디어 비어있는 상자가 있다면, 공을 비어있는 상자에 집어 넣고 count + 1 비어있는 상자가 없다면, 다음 사용까지의 시간을 비교 사용이 끝난 공이 있다면, 해당 공을 제거 후, 새 공을 집어 넣고 count + 1 사용이 끝난 공이 없다면, 다음 사용 시점이 가장 늦은 공을 제거 후, 새 공을 집어 넣고 count + 1 교체는 ..
백준 1700 멀티탭 스케줄링 파이썬 풀이, 반례 난이도 : 골드1 풀이일 : 2404077 https://www.acmicpc.net/problem/1700 1700번: 멀티탭 스케줄링 기숙사에서 살고 있는 준규는 한 개의 멀티탭을 이용하고 있다. 준규는 키보드, 헤어드라이기, 핸드폰 충전기, 디지털 카메라 충전기 등 여러 개의 전기용품을 사용하면서 어쩔 수 없이 각종 전 www.acmicpc.net 문제 캡쳐 아이디어 비어있는 플러그가 있다면, 현재 사용할 제품을 그냥 연결한다. 비어있는 플러그가 없다면, 현재 연결 되어있는 제품의 플러그를 한 개 제거하고 제거 횟수를 센다. 사용이 끝나 더이상 사용하지 않을 제품을 우선적으로 제거한다. 사용이 끝난 제품이 없다면, 다음 사용순서가 가장 많이 남은 제품을 제거한다. 전체 풀이코드 import sys ..
백준 2294 동전 2 파이썬 풀이 난이도 : 골드5 풀이일 : 2404066 https://www.acmicpc.net/problem/2294 2294번: 동전 2 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. 가치가 같은 동전이 여러 번 주어 www.acmicpc.net 문제 풀이코드 import sys n, k = map(int, sys.stdin.readline().split()) coins = [] dp = [float('inf')] * (k + 1) # 초기값 무한 dp[0] = 0 # 0 만드는 동전 개수 for _ in range(n): coins.append(int(sys.st..
백준 1106 호텔 파이썬 풀이 난이도 : 골드5 풀이일 : 2404055 https://www.acmicpc.net/problem/1106 1106번: 호텔 첫째 줄에 C와 형택이가 홍보할 수 있는 도시의 개수 N이 주어진다. C는 1,000보다 작거나 같은 자연수이고, N은 20보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 각 도시에서 홍보할 때 www.acmicpc.net 링크로 이동하기 귀찮은 분들을 위한 문제 캡쳐 풀이코드 import sys C, N = map(int, sys.stdin.readline().split()) ad = [] # 비용 정보 없음, 고객의 수 최대 100명 dp = [int(1e9)] * (C + 100) dp[0] = 0 # 0 초기화 for _ in range(N): cost, peop..
백준 9935 문자열 폭발 파이썬 풀이 난이도 : 골드4 풀이일 : 2404044 https://www.acmicpc.net/problem/9935 9935번: 문자열 폭발 첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모 www.acmicpc.net 링크로 이동하기 귀찮은 분들을 위한 문제 캡쳐 오답코드 -> 시간초과 import sys string = sys.stdin.readline().strip() target = sys.stdin.readline().strip() N = len(target) result = [] for alphabet in string: result.append..
백준 2293 동전 1 파이썬 풀이 난이도 : 골드5 풀이일 : 2404033 https://www.acmicpc.net/problem/2293 2293번: 동전 1 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. www.acmicpc.net 링크로 이동하기 귀찮은 분들을 위한 문제 캡쳐 풀이코드 import sys n, k = map(int, sys.stdin.readline().split()) coins = [] # 동전 종류 for _ in range(n): coin = int(sys.stdin.readline()) coins.append(coin) dp = [0] * (k + 1) # 경..
백준 1939 중량제한 파이썬 풀이 난이도 : 골드3 풀이일 : 2404022 https://www.acmicpc.net/problem/1939 1939번: 중량제한 첫째 줄에 N, M(1 ≤ M ≤ 100,000)이 주어진다. 다음 M개의 줄에는 다리에 대한 정보를 나타내는 세 정수 A, B(1 ≤ A, B ≤ N), C(1 ≤ C ≤ 1,000,000,000)가 주어진다. 이는 A번 섬과 B번 섬 사이에 중량제한이 www.acmicpc.net 링크로 이동하기 귀찮은 분들을 위한 문제 캡쳐 풀이코드 import sys, heapq N, M = map(int, sys.stdin.readline().split()) loads = [[] for _ in range(N + 1)] # 다리 연결 및 중량제한 for _ in range(M): # ..
백준 14267 회사 문화 1 파이썬 풀이 난이도 : 골드 4 풀이일 : 2404011 https://www.acmicpc.net/problem/14267 14267번: 회사 문화 1 영선회사에는 매우 좋은 문화가 있는데, 바로 상사가 직속 부하를 칭찬하면 그 부하가 부하의 직속 부하를 연쇄적으로 칭찬하는 내리 칭찬이 있다. 즉, 상사가 한 직속 부하를 칭찬하면 그 부하 www.acmicpc.net 링크로 이동하기 귀찮은 분들을 위한 문제 캡쳐 풀이코드 import sys sys.setrecursionlimit(10 ** 9) # 내 자식들에게 나의 칭찬 점수 누적합산 def DFS(x): for nx in tree[x]: result[nx] += result[x] DFS(nx) return n, m = map(int, sys.stdin.read..
백준 2109 순회강연 파이썬 풀이 난이도 : 골드3 풀이일 : 2403295 https://www.acmicpc.net/problem/2109 2109번: 순회강연 한 저명한 학자에게 n(0 ≤ n ≤ 10,000)개의 대학에서 강연 요청을 해 왔다. 각 대학에서는 d(1 ≤ d ≤ 10,000)일 안에 와서 강연을 해 주면 p(1 ≤ p ≤ 10,000)만큼의 강연료를 지불하겠다고 알려왔다. www.acmicpc.net 링크로 이동하기 귀찮은 분들을 위한 문제 캡쳐 풀이코드 import sys, heapq n = int(sys.stdin.readline()) order = [] # 마감일 정렬 들어온 제안 choice = [] # 강연료 정렬 선택한 제안 for _ in range(n): p, d = map(int, sys.stdin...
백준 1595 북쪽나라의 도로 파이썬 풀이 난이도 : 골드4 풀이일 : 2403284 https://www.acmicpc.net/problem/1595 1595번: 북쪽나라의 도로 입력은 여러줄에 걸쳐 주어진다. 입력의 각 줄은 세 개의 양의 정수로 구성되어있는데, 각각은 차례대로 서로 다른 두 도시의 번호와 두 도시를 연결하는 도로의 길이를 의미한다. 모든 도로는 www.acmicpc.net 링크로 이동하기 귀찮은 분들을 위한 문제 캡쳐 풀이코드 import sys from collections import deque def BFS(n): queue = deque([n]) visited = [-1] * 10001 # 방문 확인 및 거리 저장 visited[n] = 0 # 현재 노드까지의 거리 설정 while queue: x = queue.pop..
백준 1240 노드사이의 거리 파이썬 풀이 난이도 : 골드5 풀이일 : 2403273 https://www.acmicpc.net/problem/1240 1240번: 노드사이의 거리 첫째 줄에 노드의 개수 $N$과 거리를 알고 싶은 노드 쌍의 개수 $M$이 입력되고 다음 $N-1$개의 줄에 트리 상에 연결된 두 점과 거리를 입력받는다. 그 다음 줄에는 거리를 알고 싶은 $M$개의 노드 쌍 www.acmicpc.net 링크로 이동하기 귀찮은 분들을 위한 문제 캡쳐 풀이코드 import sys from collections import deque def sol(n, m): queue = deque() queue.append(n) while queue: x = queue.popleft() for nx, add in tree[x]: if nx == m: ..
백준 17836 공주님을 구해라! 파이썬 풀이 난이도 : 골드5 풀이일 : 2403262 https://www.acmicpc.net/problem/17836 17836번: 공주님을 구해라! 용사는 마왕이 숨겨놓은 공주님을 구하기 위해 (N, M) 크기의 성 입구 (1,1)으로 들어왔다. 마왕은 용사가 공주를 찾지 못하도록 성의 여러 군데 마법 벽을 세워놓았다. 용사는 현재의 가지고 있는 www.acmicpc.net 링크로 이동하기 귀찮은 분들을 위한 문제캡쳐 풀이 코드 import sys from collections import deque N, M, T = list(map(int, sys.stdin.readline().split())) castle = [list(map(int, sys.stdin.readline().split())) for _ in..