조건 :
한 아이에게 같은 보석만을 준다
보석을 안줘도 상관이 없음
찾아야 할 결과 :
가장 많은 보석을 가져간 학생이 가지고 있는 보석의 개수
알고리즘 분류 : 이분 탐색
이걸 어떻게 이분 탐색으로 풀어낼 수 있나 하는 고민이 들었다 각자 가져가는 보석의 개수가 다른데 식을 어떻게 짜는 건지 알 수가 없었다.
보석을 최대로 많이 가져갈 수 있는 수는 보석 리스트에서 제일 큰 수와 같으므로 max = max(보석 리스트)
N,M = map(int,input().split())
# 보석 담을 리스트
M_list = list()
for i in range(M):
M_list.append(int(input()))
# 정렬
M_list.sort()
# 한 명이 가질 수 있는 최소값, 최대값
min = 1
max = max(M_list)
while(min<=max):
mid = (min + max) // 2
total = 0
# 보석을 나눠가지는 학생 수 카운트
for i in M_list:
if i % mid == 0:
total += i // mid
else:
total += (i // mid) + 1
if total > N:
min = mid + 1
else:
max = mid -1
print(min)
제일 애를 먹었던 부분은 for문을 작성하는 부분
예제는 통과해서 되는 줄 알았는데 계속 틀려서 쉽지 않았다
'백준' 카테고리의 다른 글
백준 16948번: 데스 나이트 (파이썬) (0) | 2024.06.26 |
---|---|
백준 2870번: 수학숙제 (파이썬) _리스트 출력하기 / for-else (0) | 2024.06.21 |
백준 1120번: 문자열 (파이썬) (0) | 2024.06.12 |
백준 1817번: 짐 챙기는 숌 (파이썬) (1) | 2024.06.05 |
백준 1931번: 회의실 배정 (파이썬) (0) | 2024.05.29 |