백준 30802번: 웰컴 키트 [Python]

tomkitcount·2026년 1월 5일

알고리즘

목록 보기
285/304

문제 출처 : https://www.acmicpc.net/problem/30802
난이도 : 브론즈 3


문제 파악

이 문제는 “웰컴키트”를 나눠주기 위해 필요한 포장(묶음) 수를 계산하는 문제이다.

입력은 크게 3줄:
N : 참가자 수
shirts : 티셔츠 사이즈별 신청자 수 6개 (S, M, L, XL, XXL, XXXL)
T, P
T : 티셔츠는 T장씩 한 묶음으로 포장됨
P : 펜은 P자루씩 한 묶음으로 포장됨

출력도 2줄:
티셔츠 묶음 총 몇 묶음 필요한지
펜 묶음은 order_P(묶음 수)와 each_P(남는 개수)

문제 독해가 생각보다 어려웠다.


핵심

결국 올림 나눗셈이 핵심이었다.

  • size가 T로 딱 나누어 떨어지면: size//T 그대로
  • 안 나누어 떨어지면: 한 묶음을 더 추가해야 함

예를 들어 T=5일 때
size=10 => 10개면 2묶음 (딱 떨어짐) size=11 => 11개면 3묶음 (2묶음으로는 부족)

해답 및 풀이

import sys
input = sys.stdin.readline


# 참가자 수
N = int(input())


# 사이즈별 신청자 수
shirts = list(map(int,input().split()))


# 티셔츠 묶음 , 펜의 묶음 수
T, P = map(int,input().split())

order_T = 0

for size in shirts:
    order_T = order_T + (size-1) // T + 1

order_P = N // P
each_P = N % P

print(order_T)
print(order_P, each_P)

for size in shirts:
order_T = order_T + (size-1) // T + 1

에서 size-1 // T를 해주었는데
이유는 size가 5일 경우 order_T 는 논리상 1이어야 하지만 -1을 안해주면 2가 나오기때문에 조정해주었다.

만약 이런 조정이 직관적이지 않다면 math 라이브러리에 ceil 함수를 활용하자

profile
To make it count

0개의 댓글