jyamethyst21 님의 블로그

백준 30802번 - '웰컴 키트' (PYTHON 풀이) 본문

CODING 💻

백준 30802번 - '웰컴 키트' (PYTHON 풀이)

jyamethyst21 2026. 4. 4. 00:35

문제:

 

이 문제는 참가자들에게 나눠줄 티셔츠와 펜을 최소/최대로 주문하는 방법을 구하는 것이다. 

참가자의 수와 사이즈별 신청자 수, 티셔츠와 펜의 묶음 수를 입력받고, 티셔츠를 몇 묶음 주문해야하는지와 펜을 최대 몇 묶음 주문/한 자루씩 몇개 주문하는지를 출력하면 된다.

 

즉, 예제 입력을 기준으로 보면 23명의 참가자가 있고 사이즈별 필요한 인원이 위와 같을 때, 티셔츠는 5묶음씩 주문한다고 치면

S: 1묶음(3개 필요한데 1묶음에 5장이니까)

M: 1묶음(1개 필요한데 1묶음에 5장이니까)

.

.

XXXL: 2묶음(9개 필요한데 1묶음당 5개니까 2묶음이 필요)

이런식으로 계산해서 총 7묶음이 필요하고, 펜은 7개에 1묶음이므로 전체 인원 수인 23%7=2로 총 3묶음과 낱개로 2개만 구매하면 된다는 의미이다.

 

풀이:

import math

N = int(input())
size = map(int,input().split())
T, P = map(int,input().split())

t_count = 0
for i in size:
    t_count += math.ceil(i/T)
print(t_count)
print(N//P, N%P)

해당 문제를 풀기 위해서는 /, %를 적절히 활용해야 하기 때문에, 필자는 math 라이브러리를 import 하였다.

그 후 각 필요한 값을 전부 입력 받고, 티셔츠 수량을 계산하기 위해 t_count 변수를 초기화했다.

 

그 다음 size별로 입력받았던 값을 반복하며 돌면서 무조건 올림을 할 때 사용하는 ceil 함수를 활용하여 계산했다. 티셔츠의 경우 부족하지만 않는다면 남아도 문제가 없기 때문에 ceil을 썼고, size별 인원 수를 묶음의 수로 나눈 몫(올림)을 t_count에 더하면 모든 사이즈당 필요한 티셔츠의 개수가 전부 더해지게 된다. 그래서 해당 값을 출력하고, 그 다음으로는 펜의 개수를 바로 출력하였다

.

펜의 경우는 정확하게 개수가 맞아야 하기 때문에 인원수를 P로(펜 묶음당 개수) 나눈 몫과, 개별적으로도 주문이 가능하므로 나눈 나머지를 바로 출력하면 된다. (몫(묶음)*묶음당 개수+나머지를 더하면 정확히 인원수만큼 개수가 맞게됨)