-Code
import sys
input = sys.stdin.readline
m, n = map(int, input().split())
cookies = list(map(int, input().split()))
left, right = 0, max(cookies)
max_l = 0
while left <= right:
cnt = 0
mid = (left + right) // 2
if mid == 0:
break
for i in cookies:
cnt += (i // mid)
if cnt >= m:
max_l = mid
left = mid + 1
else:
right = mid - 1
print(max_l)
처음에는 리스트를 정렬하고 리스트 내의 최대값을 길이로 지정하고 이분탐색으로 길이보다 큰 리스트 범위만 검사하여 나눴을 때, 아이들 수와 같거나 크면 값을 출력하도록 했으나 코드가 꼬여서 다른 방법을 찾았습니다. 굳이 리스트의 범위를 검사할 필요 없이 길이만 조절하여 해당 리스트를 전부 돌아서 아이들 수만큼 분배가 가능하면 그 값을 저장하고 출력하면 해결이 되었습니다. 푸는 방식을 잘못 선택한 것이 조금 아쉬운 문제였습니다.
'Beakjoon&프로그래머스 > 파이썬' 카테고리의 다른 글
[백준/파이썬] 13702번 파닭파닭 (0) | 2022.05.19 |
---|---|
[백준/파이썬] 13702번 이상한 술집 (0) | 2022.05.19 |
[백준/파이썬] 16960번 스위치와 램프 (0) | 2022.05.19 |
[백준/파이썬] 19637번 IF문 좀 대신 써줘 (0) | 2022.05.19 |
[프로그래머스/파이썬] 다음 큰 숫자 (0) | 2022.05.18 |