백준[ 2792 | Python ] 보석 상자
업데이트:
문제
https://www.acmicpc.net/problem/2792
풀이
문제는 모든 보석을 학생들에게 나눠줄 때 그 최대값을 가장 낮추면 된다.
탐색할 수 는 나눠줄 보석의 수 이다.
그에 따라서 보석의 개수를 나누어 가면서 탐색해주면 되는데,
이 때 math.ceil을 사용해 해당 수가 홀수인지 짝수인지 고려할 필요 없게 한다.
import sys, math
input = sys.stdin.readline
N, M = map(int, input().split())#학생 수, 색상의 수
gems = [int(input()) for _ in range(M)]#색상별 보석의 수
l,r = 1,max(gems)
flat = sys.maxsize
while True:
if l > r:
break
m = (l+r)//2
tmp = 0
for i in gems:
tmp += math.ceil(i/m)
if tmp > N:
l = m+1
else:
r = m-1
flat = min(flat, m)
print(flat)
생각 & 정리
ceil을 생각보다 이용할 경우가 많은데, 앞으로 애용할 것 같다.
ceil은 나머지가 있을 경우 몫에 1을 더해 준다.
소수점 처리 함수에는 ceil 말고도 round, floor이 있는데, 이들은 각각 반올림, 소수점아래 무시로 소수점을 처리한다.
댓글남기기