목록Algorithm (236)
HTD
www.acmicpc.net/problem/2589 2589번: 보물섬 보물섬 지도를 발견한 후크 선장은 보물을 찾아나섰다. 보물섬 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 각 칸은 육지(L)나 바다(W)로 표시되어 있다. 이 지도에서 www.acmicpc.net import sys input = sys.stdin.readline def bfs(x, y): global maxSpentTime dx = [1, -1, 0, 0] dy = [0, 0, 1, -1] spentTimeMap = [[-1]*M for _ in range(N)] spentTimeMap[x][y] = 0 todo = [(x, y)] while todo: x, y = todo.pop(0) for i in r..
www.acmicpc.net/problem/4358 4358번: 생태학 프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어 www.acmicpc.net import sys input = sys.stdin.readline trees = {} treeCount = 0 while True: curInput = input().rstrip() if not curInput: break if trees.get(curInput): trees[curInput] += 1 else: trees[curInput] = 1 treeCount += 1 sortedTreesNa..
www.acmicpc.net/problem/10775 import sys input = sys.stdin.readline def findParent(x): if parent[x] == x: return x p = findParent(parent[x]) parent[x] = p return p def union(x, y): x = findParent(x) y = findParent(y) if x < y: parent[y] = x else: parent[x] = y if __name__ == '__main__': G = int(input()) P = int(input()) airplanes = [int(input()) for _ in range(P)] parent = [i for i in range(G+1)..
www.acmicpc.net/problem/13904 import sys input = sys.stdin.readline N = int(input()) homeworks = [] for _ in range(N): homeworks.append(list(map(int, input().split()))) homeworks.sort(reverse=True, key=lambda x: x[1]) score = 0 days = [0]*1001 for homework in homeworks: for d in range(homework[0], 0, -1): if days[d] == 0: days[d] = 1 score += homework[1] break print(score) 값을 입력 받고, 이것을 받는 점수를 기..
www.acmicpc.net/problem/2212 import sys input = sys.stdin.readline N = int(input()) K = int(input()) censors = list(map(int, input().split())) censors.sort() if N < K: print(0) else: distancesBetweenCensors = [] for i in range(N-1): distancesBetweenCensors.append(censors[i+1]-censors[i]) distancesBetweenCensors.sort() for _ in range(K-1): distancesBetweenCensors.pop() print(sum(distancesBetweenC..
www.acmicpc.net/problem/15903 import heapq import sys input = sys.stdin.readline def getMergedCards(cards): newCard = heapq.heappop(cards) + heapq.heappop(cards) heapq.heappush(cards, newCard) heapq.heappush(cards, newCard) return cards n, m = map(int, input().split()) cards = list(map(int, input().split())) heapq.heapify(cards) for _ in range(m): cards = getMergedCards(cards) print(sum(cards)) ..
import sys input = sys.stdin.readline def dfs(num, cnt): if num == B: global Min if Min == -1: Min = cnt else: Min = min(Min, cnt) return nextNum = num*2 if nextNum
import sys input = sys.stdin.readline N, L = map(int, input().split()) leaks = list(map(int, input().split())) leaks.sort() cntTape = 0 noLeakUntil = 0 for leak in leaks: if noLeakUntil < leak: noLeakUntil = leak + L - 1 cntTape += 1 print(cntTape) 만약 테이프의 길이가 7이라고 했을 때, 10의 위치를 위해 9.5~16.5위치에 붙인다고 하면, 10~16의 위치까지의 누수도 해결이 된다. 우선 누수된 구간을 오름차순으로 정렬한다. 그리고 누수난 위치들을 for문으로 돌면서 순차적으로 테이프를 붙이되, 누수가 해..
www.acmicpc.net/problem/13305 import sys input = sys.stdin.readline N = int(input()) distances = list(map(int, input().split())) prices = list(map(int, input().split())) curMin = prices[0] minCost = 0 for i in range(N-1): curMin = min(curMin, prices[i]) minCost += curMin*distances[i] print(minCost) 우선, 문제를 보고 드는 생각은 가장 싼 곳에서 최대한 많이 주유를 해가면 된다는 것이었다. 그럼, 그 전에는 어떻게 가야하는가? 일반화를 해야하는데, 이것을 설명하기 위해 그..
www.acmicpc.net/problem/1783 import sys def getMaxVisitable(N, M): if N == 1: return 1 elif N == 2: return min(4, (M+1)//2) elif N >= 3: if M >= 7: return M-2 else: return min(M, 4) input = sys.stdin.readline N, M = map(int, input().split()) print(getMaxVisitable(N, M)) 사실 문제는 어려운 편이 아니어서, 코드의 도출 과정을 설명하겠다. 우선, 'N과 M은 2,000,000,000보다 작거나 같은 자연수이다.'를 통해서 이 문제는 반복문을 쓰지 말고 계산식을 써야한다라고 말해주고 있는 것이다. ..