목록Algorithm (236)
HTD

https://www.acmicpc.net/problem/2923 2923번: 숫자 게임 창영이와 현우는 새로운 게임을 하고 있다. 이 게임은 여러 라운드로 이루어져 있다. 매 라운드가 시작할 때, 현우는 창영이에게 100보다 작은 두 숫자 A와 B를 말해준다. 그러고 난 뒤, 창영이는 www.acmicpc.net Pypy3로 맞은 사람이 총 6명이긴 하지만 그 중에 시간복잡도와 공간복잡도가 마지막 등수인 풀이입니다.(참고로 Python으로 통과한 사람은 1명도 없습니다.) 이 점 참고해주시길 바랍니다. import sys input = sys.stdin.readline def getMinMaxSum(): # a, b를 변형시키고 다시 원상복구하기 위함 originalA = [a[i] for i in r..
https://www.acmicpc.net/problem/2785 import sys input = sys.stdin.readline def getChainCount(chains, N): chains.sort() chainCount = N tiedChains = 1 for chain in chains: if tiedChains + chain >= chainCount: break else: tiedChains += chain chainCount -= 1 return chainCount-1 if __name__ == '__main__': N = int(input()) chains = list(map(int, input().split())) chainCount = getChainCount(chains, N) ..
https://www.acmicpc.net/problem/1717 1717번: 집합의 표현 첫째 줄에 n(1 ≤ n ≤ 1,000,000), m(1 ≤ m ≤ 100,000)이 주어진다. m은 입력으로 주어지는 연산의 개수이다. 다음 m개의 줄에는 각각의 연산이 주어진다. 합집합은 0 a b의 형태로 입력이 주어진다. 이는 www.acmicpc.net #include #include int *parents; int findParent(int x) { if (parents[x] == x) return x; parents[x] = findParent(parents[x]); return parents[x]; } void unionSets(int x, int y) { int parentX = findParent..
https://www.acmicpc.net/problem/1976 1976번: 여행 가자 동혁이는 친구들과 함께 여행을 가려고 한다. 한국에는 도시가 N개 있고 임의의 두 도시 사이에 길이 있을 수도, 없을 수도 있다. 동혁이의 여행 일정이 주어졌을 때, 이 여행 경로가 가능한 것인 www.acmicpc.net #include #include int *parents; int findParent(int x) { if (parents[x] == x) return x; parents[x] = findParent(parents[x]); return parents[x]; } void unionSets(int x, int y) { int parentX = findParent(x); int parentY = find..
https://www.acmicpc.net/problem/10165 10165번: 버스 노선 첫 번째 줄에는 버스 정류소의 개수 N(3 ≤ N ≤ 1,000,000,000)이 주어지고 두 번째 줄에는 버스 노선의 수 M(2 ≤ M ≤ 500,000)이 주어진다. 각 버스 노선은 1부터 M까지의 번호로 구분된다. 그 다음 M개 www.acmicpc.net import sys input = sys.stdin.readline def getIsRemainer(info): info.sort(reverse=True, key=lambda x: x[1]) info.sort(key=lambda x: x[0]) isRemainer = [True for _ in range(M)] maxB = 0 for _, b, c in ..

https://www.acmicpc.net/problem/2036 2036번: 수열의 점수 n개의 정수로 이루어진 수열이 있다. 이 수열에서 한 정수를 제거하거나, 또는 두 정수를 제거할 수 있다. 한 정수를 제거하는 경우에는 그 정수가 점수가 되고, 두 정수를 제거하는 경우에는 두 www.acmicpc.net import sys input = sys.stdin.readline def getMaxScore(nums, N): if N == 1: return nums[0] score = 0 # 음수 for i in range(0, N-1, 2): cur, next = nums[i], nums[i+1] if cur < 0 and next < 0: score += cur * next else: if cur < ..
https://www.acmicpc.net/problem/12018 12018번: Yonsei TOTO 연세대학교 수강신청이 얼마 전부터 바뀌어, 마일리지 제도로 바뀌었다. 이 제도는 각각의 학생들에게 마일리지를 주어 듣고 싶은 과목에 마일리지를 과목당 1~36을 분배한다. 그리고 모두 분배 www.acmicpc.net import sys input = sys.stdin.readline def getMinMileage(p, l, nums): minMileageIndex = p - l if minMileageIndex < 0: return 1 else: nums.sort() return nums[minMileageIndex] def getMaxClassCount(m, mileages): maxClassCo..

https://www.acmicpc.net/problem/2258 2258번: 정육점 첫째 줄에 두 정수 N(1≤N≤100,000), M(1≤M≤2,147,483,647)이 주어진다. N은 덩어리의 개수를 의미하고, M은 은혜가 필요한 고기의 양이다. 다음 N개의 줄에는 각 고기 덩어리의 무게와 가격을 나타내는 www.acmicpc.net import sys input = sys.stdin.readline def getMinCost(meats): # 무게에 대해서도 정렬해주는 것은, 같은 가격의 고기들을 살 때 고중량 고기를 먼저 사겠다는 것임 meats.sort(reverse=True, key=lambda x: x[0]) meats.sort(key=lambda x: x[1]) weightCount = ..
https://www.acmicpc.net/problem/10800 10800번: 컬러볼 첫 줄에는 공의 개수를 나타내는 자연수 N이 주어진다(1 ≤ N ≤ 200,000). 다음 N개의 줄 중 i번째 줄에는 i번째 공의 색을 나타내는 자연수 Ci와 그 크기를 나타내는 자연수 Si가 주어진다(1 ≤ Ci ≤ N www.acmicpc.net import sys input = sys.stdin.readline def getSumsToPrint(inputs): sortedInputs = sorted( sorted(inputs, key=lambda x: x[0]), key=lambda x: x[1]) prefixSums = [[0] for _ in range(N+1)] prevSize = 0 prevColor ..

https://www.acmicpc.net/problem/2885 2885번: 초콜릿 식사 학교 근처 편의점에 새 초콜릿이 들어왔다. 이 초콜릿은 막대 모양이고, 각 막대는 정사각형 N개로 이루어져 있다. 초콜릿의 크기(정사각형의 개수)는 항상 2의 제곱 형태이다. 즉, 1, 2, 4, 8, 16, ... www.acmicpc.net import sys input = sys.stdin.readline def solution(): K = int(input()) area = getArea(K) if K == area: print(area, 0) else: print(area, getSliceCount(area, K-area//2)) def getArea(n): area = 1 while area < n: a..