[Silver V] 사탕 - 11256
https://www.acmicpc.net/problem/11256
문제설명
당신은 사탕 공장의 주인이다. 날마다, 당신은 J개의 사탕을 가게에 보내기 위해 상자에 포장해야 한다.
당신은 크기가 다른 상자 N개를 가지고 있다. 당신은 편리를 위해 상자를 최소한으로 쓰려고 한다. (박스를 다 채울 필요는 없다. 일부분만 채워도 된다.)
당신이 공장에서 나오는 사탕의 개수와 각 상자의 크기를 입력받고, 상자를 최소한으로 쓸 때의 사용되는 상자 개수를 출력하는 프로그램을 작성하라. 사탕들을 포장할 공간은 충분하다는 것이 보장된다.
입력
첫 번째 줄에는 테스트 케이스의 개수 T (1 ≤ T ≤ 10)가 주어진다. 각각의 테스트 케이스는 아래 형식을 따른다.
테스트 케이스의 첫 번째 줄에는 사탕의 개수 J와 상자의 개수 N이 주어진다. (1 ≤ J, N ≤ 1,000)
다음 N개의 줄에는 각각 줄마다 i번째 상자의 세로 길이 Ri 그리고 가로 길이 Ci가 주어진다. 상자의 크기는 다른 상자의 크기와 똑같을 수도 있다. 상자에는 Ri * Ci보다 더 많은 사탕을 포장할 수 없다. (1 ≤ Ri, Ci ≤ 10,000)
출력
출력은 T개의 줄로 이루어진다. 각각의 줄마다 i번째 테스트 케이스에서 최소한의 상자 개수를 출력하여야 한다.
예제입력 / 예제출력
문제이해 및 코드설명
사탕의 개수를 담기위해 각각 용량이 다른 박스 사용할때 최소한의 박스 수를 구하는 문제이다
상자에는 각각 가로 세로 줄의 정보를 입력받기 떄문에 가로 * 세로를하게되면 박스에 담을 수 있는 수를 구할수가있다.
사탕의 개수가 정해져있으므로 가로 * 세로 를 구한값을 정렬 후 초과하거나 같으면 멈추는 코드를 작성하였다.
코드
import sys
input = sys.stdin.readline
T = int(input())
for i in range(T):
tmp = []
J, N = map(int,input().split())
for j in range(N):
a,b = map(int,input().split())
tmp.append(a*b)
tmp.sort(reverse=True)
ans = 0
for a in range(N):
ans += tmp[a]
if ans >= J:
print(a+1)
break
'알고리즘 문제풀이' 카테고리의 다른 글
백준 - 경로 찾기 11403(Python) (0) | 2023.02.28 |
---|---|
백준 ATM 11399 (Python) (0) | 2023.02.28 |
백준 - 덱 10866(Python) (0) | 2023.02.28 |
백준 - 큐 10845(Python) (0) | 2023.02.27 |
백준 - 스택 10828(Python) (0) | 2023.02.27 |