[백준/파이썬] 30802번: 웰컴 키트

수박강아지·2025년 1월 7일

BAEKJOON

목록 보기
1/174
post-thumbnail

문제

https://www.acmicpc.net/problem/30802

풀이

문제가 눈에 들어오지 않아 여러번 읽었다.
문제를 다시 읽고 예제를 보고 반복하다 보니 문제가 눈에 들어온다.
문제가 이해되지 않을 때에는 다시 읽어보는 습관을 들입시다 다들..

아무튼 문제 풀이를 해봅시다.

  • 티셔츠는 6가지 사이즈가 있다.
  • 티셔츠는 같은 사이즈의 T장 묶음으로만 주문할 수 있다.
  • 펜은 한 종류(종류 신경 쓰지 않아도 됨)
  • P자루씩 묶음으로 주문하거나, 한 자루씩 주문할 수 있다.
  • 티셔츠는 남아도 되지만 부족해선 안 된다.
  • 펜은 남아도 안 되고 참가자 수만큼 준비해야 된다.

그리고 예제를 봅시다.

  • 참가자의 수 N
  • 사이즈별 신청자의 수가 공백으로 구분되어 입력
  • 티셔츠의 묶음 수 T, 펜의 묶음 수 P

무슨 소린지 몰라도 예제를 보면 이해가 갑니다.

우리는 T의 묶음으로 티셔츠를 구매 가능하고, P의 묶음 만큼 펜을 구매가 가능합니다.
즉, S를 3장 구매하려고 함 == 5장 묶음 1개를 시키면 된다는 겁니다. (남아도 되지만 부족하면 안 되므로)

예제를 분석해보면

사이즈필요한 티셔츠 수시켜야 될 묶음
S31
M11
L41
XL11
XXL51
XXXL92

이러한 결과가 나오고 총 7묶음이 필요하다는 결과가 나오게 됩니다.

이걸 코드로 구현해야 하는데 처음엔 어떻게 할까 고민이 굉장히 많았습니다.
처음엔 사이즈가 T보다 작으면 cnt를 1 증가 시키고 T보다 크면 사이즈의 값을 줄이고 다시 반복 시키는 방법을 쓰려고 했으나..
굉장히 비효율적이라 우선 손으로 풀어보았읍니다.

여기서 규칙이 보이게 되는데, 각 사이즈가 T로 나누어 떨어지면 그 몫만큼 묶음이 증가하고 나누어 떨어지지 않으면 몫+1 만큼 증가되는 것을 확인할 수 있습니다.

size = 10, T = 5
size // T = 2묶음 필요
size = 13, T = 5
size // T = 2+1 묶음 필요

코드로 바꾸면

if i % t == 0:
	cnt += i // t
else:
	cnt += i // t + 1

다음으로 펜의 묶음 수를 구해봅시다.
예제를 보면 우리는 총 23개의 펜이 필요합니다.(예제 입력 N이 23)
그리고 펜을 7개씩 한 묶음으로 살 수 있다고 나와 있습니다.
즉, 3묶음(23//7)을 살 수 있고 개별로 구매해야하는 펜의 개수는 2개(23%7)입니다.

코드로 바꾸면

n//p, n%p

내 코드

import sys
input = sys.stdin.readline

n = int(input())
size = list(map(int,input().split()))
t,p = map(int,input().split())
cnt = 0

for i in size:
    if i % t == 0:
        cnt += i // t
    else:
        cnt += i // t + 1

print(cnt)
print(n//p, n%p)

후기

면접 준비 때문에 손 놓고 있다가 굳은 머리 좀 풀겸 solved.ac에 클래스 중 안 푼 문제부터 해결하고 있었다.
간만에 푸니까 문제가 눈에 들어오지도 않아 굉장히 충격 받았다..😢
다시 열심히 해보자..👊

0개의 댓글