www.acmicpc.net/problem/11256www.acmicpc.net/problem/11256
11256번: 사탕
당신은 사탕 공장의 주인이다. 날마다, 당신은 J개의 사탕을 가게에 보내기 위해 상자에 포장해야 한다. 당신은 크기가 다른 상자 N개를 가지고 있다. 당신은 편리를 위해 상자를 최소한으로 쓰
www.acmicpc.net
N개의 상자로 J개의 사탕을 포장해야함(최소 상자)
Input: J, N (사탕 갯수, 상자 크기)
Output : 최소로 필요한 상자의 수
사탕 갯수와 상자의 용량을 인풋으로 받는다.
상자의 인풋은 [list(map(int,input().split())) for _ in range(N)] 으로 받으면 for문 없이 받아줄 수 있다.
가장 용량이 큰 상자부터 사용하며, 남아있는 사탕의 수를 세어준다.
import sys
input = sys.stdin.readline
def solve(J,boxes):
# 각 박스에 담을 수 있는 최대 사탕수를 큰 순으로 나열
boxes = sorted(boxes,reverse=True)
ans = 0
while J>0: # 포장 할 사탕이 남아있으면
# 가장 큰 상자부터 사탕을 포장하고
packed = boxes.pop(0)
# 남은 사탕의 갯수를 세준다
J = J-packed
ans += 1
return ans
if __name__=='__main__':
T = int(input())
answers = []
for t in range(T):
J,N = map(int,input().split())
boxes = []
for i in range(N):
r,c = map(int, input().split()) # r : 세로, c: 가로
boxes.append(r*c) # box에 담을 수 있는 사탕의 갯수
answers.append(solve(J, boxes))
for ans in answers:
print(ans)
인풋 형식을 sys.stdin.readline으로 바꿨더니, 같은 코드인데 280ms에서 60ms가 됐다.
'공부하는 것들 > 알고리즘' 카테고리의 다른 글
백준 14720: 우유 축제(DP) ** (0) | 2021.05.02 |
---|---|
백준 12782 : 비트 우정지수(그리디) (0) | 2021.05.02 |
백준 9440 : 숫자 더하기(그리디)*** (0) | 2021.03.12 |
백준 4796 : 캠핑(그리디) (0) | 2021.03.12 |
백준 2891 : 카약과 강풍(그리디) (0) | 2021.03.07 |