https://www.acmicpc.net/problem/30802
문제가 눈에 들어오지 않아 여러번 읽었다.
문제를 다시 읽고 예제를 보고 반복하다 보니 문제가 눈에 들어온다.
문제가 이해되지 않을 때에는 다시 읽어보는 습관을 들입시다 다들..
아무튼 문제 풀이를 해봅시다.
그리고 예제를 봅시다.
무슨 소린지 몰라도 예제를 보면 이해가 갑니다.
우리는 T의 묶음으로 티셔츠를 구매 가능하고, P의 묶음 만큼 펜을 구매가 가능합니다.
즉, S를 3장 구매하려고 함 == 5장 묶음 1개를 시키면 된다는 겁니다. (남아도 되지만 부족하면 안 되므로)
예제를 분석해보면
| 사이즈 | 필요한 티셔츠 수 | 시켜야 될 묶음 |
|---|---|---|
| S | 3 | 1 |
| M | 1 | 1 |
| L | 4 | 1 |
| XL | 1 | 1 |
| XXL | 5 | 1 |
| XXXL | 9 | 2 |
이러한 결과가 나오고 총 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에 클래스 중 안 푼 문제부터 해결하고 있었다.
간만에 푸니까 문제가 눈에 들어오지도 않아 굉장히 충격 받았다..😢
다시 열심히 해보자..👊