목록Algorithm/백준 (224)
Hanbit the Developer
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보다 작거나 같은 자연수이다.'를 통해서 이 문제는 반복문을 쓰지 말고 계산식을 써야한다라고 말해주고 있는 것이다. ..
import sys input = sys.stdin.readline def dfs(idx, cnt): global maxCntReadable if cnt == K-5: # Base Case cntReadable = 0 for word in words: isReadable = True for c in word: if isLearned[ord(c)-ord('a')] == False: isReadable = False break if isReadable: cntReadable += 1 maxCntReadable = max(maxCntReadable, cntReadable) return for i in range(idx, 26): # Recursive Case if isLearned[i] == False: is..
www.acmicpc.net/problem/7562 7562번: 나이트의 이동 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 www.acmicpc.net import sys input = sys.stdin.readline def getNextPos(x, y): global isVisited RET = [] dx = [-1, -2, -2, -1, 1, 2, 2, 1] dy = [-2, -1, 1, 2, 2, 1, -1, -2] for i in range(8): curX, curY = x+dx[i], y+dy[i] if 0
import sys input = sys.stdin.readline T = int(input()) for _ in range(T): K = int(input()) heap = [] nums = [0]+list(map(int, input().split())) sums = [0]*(K+1) for i in range(1, K+1): sums[i] = sums[i-1]+nums[i] dp = [[0]*(K+1) for _ in range(K+1)] for i in range(2, K+1): # 길이 for j in range(1, K+2-i): # 시작지점..K-1~0 dp[j][j+i-1] = min([dp[j][j+k]+dp[j+k+1][j+i-1] for k in range(i-1)]) + (sums[j..
import sys input = sys.stdin.readline N, K = map(int, input().split()) coins = [] for _ in range(N): coins.append(int(input())) RET = 0 curMoney = K while curMoney > 0: curMaxCoin = coins.pop() RET += curMoney // curMaxCoin curMoney = curMoney % curMaxCoin print(RET) 최댓값을 꺼내서 RET, curMoney에 각각 연산해준다. 여기서 RET의 연산은 curMoney보다 curMaxCoin이 크면 0을 반환할 것이고, curMoney는 그대로일 것이다. 따라서 curMaxCoin이 curMoney ..