BOJ - 2792

주의·2024년 1월 26일
0

boj

목록 보기
123/214

백준 문제 링크

❓접근법

  1. 보석의 개수를 array에 받아주고 정렬 후
    start = 1, end = max(array)로 지정한다.
  2. 기본 이분 탐색 코드에서 cnt = 0으로 지정한다.(아이들의 수)
    for문으로 array의 원소를 살펴보는데,
  • 원소를 mid로 나눴을 때 나머지가 0이면 cnt += 원소 // mid
  • 원소를 mid로 나눴을 때 나머지가 0이 아니면 cnt += 원소 // mid + 1
  1. 그 다음 조건은 아래와 같다.
  • 만약 cnt가 아이들의 수 N보다 작거나 같으면
    result = mid, end = mid - 1
  • 만약 cnt가 아이들의 수 N보다 크다면
    start = mid + 1
  1. result를 출력하면 끝!

👌🏻코드

N, M = map(int,input().split())
array = []
for _ in range(M):
    array.append(int(input()))
    
array.sort()

start, end = 1, max(array)
result = 0
while start <= end:
    mid = (start + end) // 2
    cnt = 0
    for i in array:
        if i % mid == 0:
            cnt += i // mid
        else:
            cnt += i // mid + 1
            
    if cnt <= N:
        result = mid
        end = mid - 1
        
    else:
        start = mid + 1
        
print(result)

0개의 댓글