목록Algorithm (236)
HTD
https://www.acmicpc.net/problem/1202 1202번: 보석 도둑 첫째 줄에 N과 K가 주어진다. (1 ≤ N, K ≤ 300,000) 다음 N개 줄에는 각 보석의 정보 Mi와 Vi가 주어진다. (0 ≤ Mi, Vi ≤ 1,000,000) 다음 K개 줄에는 가방에 담을 수 있는 최대 무게 Ci가 주어진다. (1 ≤ Ci www.acmicpc.net import sys import heapq input = sys.stdin.readline # 입력 N, K = map(int, input().split()) jewelries = sorted([list(map(int, input().split())) for _ in range(N)]) bags = sorted([int(input()) ..

https://www.acmicpc.net/problem/2075 2075번: N번째 큰 수 첫째 줄에 N(1 ≤ N ≤ 1,500)이 주어진다. 다음 N개의 줄에는 각 줄마다 N개의 수가 주어진다. 표에 적힌 수는 -10억보다 크거나 같고, 10억보다 작거나 같은 정수이다. www.acmicpc.net import sys input = sys.stdin.readline N = int(input()) numbers = [] for _ in range(N): numbers.append(list(map(int, input().split()))) indices = [N-1]*N for _ in range(N): maxNumber = numbers[indices[0]][0] maxIndex = 0 for i i..
https://www.acmicpc.net/problem/1543 1543번: 문서 검색 세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만들려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한 www.acmicpc.net import sys input = sys.stdin.readline def isValidIndex(index): for i in range(wordLen): if document[index+i] != word[i]: return False return True document = str(input().rstrip()) word = str(input().rstrip()) documentLen, wordL..

https://www.acmicpc.net/problem/1802 1802번: 종이 접기 첫째 줄에 테스트 케이스의 개수 T가 주어진다. T는 1000보다 작거나 같은 자연수이다. 둘째 줄부터 T개의 줄에 각각의 종이가 어떻게 접혀있는지가 주어진다. 종이의 정보는 문자열로 주어지며, 1 www.acmicpc.net import sys input = sys.stdin.readline def isAvailableStr(str): todo = list(str) while len(todo) >= 3: for i in range(2, len(todo), 2): if todo[i-2] == todo[i]: return False nextTodo = [] for i in range(1, len(todo), 2): n..
https://www.acmicpc.net/problem/1911 1911번: 흙길 보수하기 어젯밤 겨울 캠프 장소에서 월드 본원까지 이어지는, 흙으로 된 비밀길 위에 폭우가 내려서 N (1
https://www.acmicpc.net/problem/2141 2141번: 우체국 첫째 줄에 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 X[1] A[1], X[2] A[2], …, X[N] A[N]이 주어진다. 범위는 |X[i]|≤1,000,000,000, 0≤A[i]≤1,000,000,000 이며 모든 입력은 정수이다. www.acmicpc.net import sys input = sys.stdin.readline N = int(input()) postOffice = [list(map(int, input().split())) for _ in range(N)] postOffice.sort(key=lambda x: x[0]) mid = round(sum(p for _, p in post..
https://www.acmicpc.net/problem/2012 2012번: 등수 매기기 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 500,000) 둘째 줄부터 N개의 줄에 걸쳐 각 사람의 예상 등수가 순서대로 주어진다. 예상 등수는 500,000 이하의 자연수이다. www.acmicpc.net import sys input = sys.stdin.readline N = int(input()) scores = sorted([int(input()) for _ in range(N)]) print(sum(abs(scores[i]-(i+1)) for i in range(N))) 등수의 중복이 없으므로, 내림차순으로 정렬하고, i에 대해 for문을 돌면서 scores[i]와 i+1의 차이를 합해주면 답이 ..
https://www.acmicpc.net/problem/1082 import sys input = sys.stdin.readline def getNumbersWithMaxDigit(): global money numbersWithMaxDigit = [] # 0 제외한 숫자들 중에 가장 싼 것으로 첫자리 결정 minCost, minIndex = getMinCostAndIndex(costs[1:10]) if money - minCost < 0: return [] money -= minCost numbersWithMaxDigit.append(minIndex+1) # 가장 싼 것으로 남은 자리들 결정 minCost, minIndex = getMinCostAndIndex(costs) while money-min..

https://www.acmicpc.net/problem/2812 2812번: 크게 만들기 N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오. www.acmicpc.net import sys input = sys.stdin.readline # p 이전 숫자들 중에 -1이 아닌 것이 있다면 해당 인덱스를 받아옴 def getPreviousNumberIndex(p, numberList): p -= 1 while p >= 0: if numberList[p] == -1: p -= 1 else: return p return -1 def getRemovedMaxNumberList(numberList): kCount = 0 p, n = 0, 1 # 앞에서..
https://www.acmicpc.net/problem/12970 12970번: AB 첫째 줄에 문제의 조건을 만족하는 문자열 S를 출력한다. 가능한 S가 여러 가지라면, 아무거나 출력한다. 만약, 그러한 S가 존재하지 않는 경우에는 -1을 출력한다. www.acmicpc.net import sys input = sys.stdin.readline def getStr(N, K): curStr = ['B']*N aCount = 0 curK = 0 lastAIndex = -1 while curK < K: if lastAIndex AABBBB 순서로 흘러간다. 그러면 문자열이 변화할 때 2가지의 패턴을 가진다. 첫째는 A를 앞으로 밀어내는 식, 두번째는 A를 하나 추가하는 것이다. 이제 후자의 패턴을 분석해보..