매일 BOJ

(매일 BOJ) Python 30802번 웰컴 키트

norepinephrine 2025. 3. 23. 23:19

📦 문제 요약

  • 참가자 수 N명
  • 티셔츠는 6가지 사이즈별로 개수가 주어지고, 티셔츠는 T장씩 한 묶음으로만 주문 가능
  • 펜은 P자루씩 한 묶음으로 주문할 수 있고, 나머지는 낱개로 주문
  • 출력은:
    1. 티셔츠를 모든 사람에게 맞춰서 줄 수 있도록 하려면 최소 몇 묶음이 필요한지
    2. 펜은 묶음으로 최대 몇 개, 그리고 몇 개는 낱개로 사야 하는지

💡 아이디어 (접근법만!)

  • 티셔츠: 각 사이즈마다 필요한 수를 T로 나눔
    • (필요한 수 + T - 1) // T 공식 사용하면 부족하지 않게 묶음 계산 가능
  • 펜: 전체 인원 N을 P로 나누면
    • 몫 = 묶음 수
    • 나머지 = 낱개로 주문해야 하는 수

🚨 팁

  • 입력이 많진 않지만, sys.stdin.readline() 쓰면 더 안전
  • 반복문 대신 나눗셈으로 계산하면 시간 초과 안 남
  • 출력 형식 주의:
    • 첫 줄: 티셔츠 묶음 수
    • 둘째 줄: 펜 묶음 수와 낱개 수를 한 줄에 출력

1차 코드 - 시간초과

import sys

N = int(sys.stdin.readline())
size = list(map(int, sys.stdin.readline().split()))
T,P = map(int,sys.stdin.readline().split())
Tshirt = 0
pen = 0
pen_else = 0
for i in size:
    while True:
        if i <= T:
            Tshirt += 1
            break
        else:
            i = i - T
            Tshirt += 1

while True:
    if N < P:
        pen_else = N
        break
    else:
        N = N - P
        pen += 1
print(Tshirt)
print(pen, pen_else)

 

2차 수정

import sys
input = sys.stdin.readline

# 입력 받기
N = int(input())
sizes = list(map(int, input().split()))
T, P = map(int, input().split())

# 티셔츠 묶음 계산
tshirt_bundles = 0
for size in sizes:
    if size == 0:
        continue
    tshirt_bundles += (size + T - 1) // T

# 펜 묶음 계산
pen_bundles = N // P
pen_individuals = N % P

# 결과 출력
print(tshirt_bundles)
print(pen_bundles, pen_individuals)