From 7509610c7730541034674a269bb5b9e5ef9d3689 Mon Sep 17 00:00:00 2001 From: nkey Date: Thu, 5 Feb 2026 14:46:15 +0900 Subject: [PATCH] =?UTF-8?q?2512-s2=20=EC=84=B1=EA=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workbook_8708/2512-s2.py | 56 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 workbook_8708/2512-s2.py diff --git a/workbook_8708/2512-s2.py b/workbook_8708/2512-s2.py new file mode 100644 index 0000000..8d0f46b --- /dev/null +++ b/workbook_8708/2512-s2.py @@ -0,0 +1,56 @@ +# 예산 + +import sys + +input = sys.stdin.readline + + +def solution(): + n = int(input().rstrip()) + req = list(map(int, input().rstrip().split())) + + m = int(input().rstrip()) + + if sum(req) <= m: + print(max(req)) + return + + now_ceil = m // n + now_asset = m + sorted_req = sorted(req) + idx = 0 + + while idx < n-1 and now_ceil >= sorted_req[idx]: + now_asset -= sorted_req[idx] + idx += 1 + now_ceil = now_asset // (n-idx) + + print(now_ceil) + return + + +solution() + +""" +걸린 시간: 1시간 10분 + +시간 복잡도: 내 풀이는 정렬할 때 O(nlogn)이고, n개의 요청예산을 보기 때문에 O(n)이라서 전체 시간복잡도는 O(nlogn)이다. +이분탐색 풀이의 경우는 0부터 max(req) 범위에서 찾기 때문에 log(max(req))이고, 매 mid마다 req 내용을 다 확인하므로 +O(nlog(max(req)))이다. +문제에서는 req <= 10^5이고, n <= 10000이기 때문에 log로 치면 내가 더 빠르지만 이 조건이 바뀌는 것에 따라 달라질 것 같다. + +해설: 요청 예산의 합이 m보다 작거나 같다면 그냥 다 주고 요청 예산 중 최대값을 출력하면 된다. +근데 아니라면 두 가지 풀이 방법이 있다. +먼저 내가 처음 푼 방식은 요청 예산들을 오름차순으로 정렬한 후 처음 상한액을 평균값으로 매긴다. +그 다음 한 곳씩 예산을 나눠주는데 이때 상한액 이하의 곳들은 나눠주고 남은 예산으로 남은 곳의 수를 나눠서 다시 평균값을 상한액으로 바꾼다. +이 과정을 반복하다가 현재 상한액보다 많은 곳을 요청한 곳이 있으면 앞으로 뒤에 있는 곳들도 요청한만큼 채워줄 수 없기 때문에 +이번 상한액이 답이다. + +근데 이분탐색으로 푸는 방법이 있음. +전체 요청 예산의 범위 중 상한액을 이분 탐색으로 찾아가는 것임. +한 점을 찾는 것이기 때문에 l <= r 조건에서 [mid]를 설정하고, n개의 요청 예산을 설정한 mid 기준으로 다 분배해본 후, +m 이하 중 최대값을 찾으면 된다. +s를 그때그때 결과라고 하면, 오름차순 정렬에서 s가 m 이하인 경우를 찾는 것이기 때문에 s <= m 이면 답이 될 수 있고, +오른쪽을 찾아봐야하기 때문에 l = mid라고 생각할 수 있지만, 이것은 들어갈 곳이 아닌 한 점을 찾는 것이기 때문에 +l <= r을 한 이상 안 끝날 수도 있다. 따라서 mid는 따로 기록해두고, l = mid + 1, r= mid - 1로 해가며 찾아야한다. +""" \ No newline at end of file