본문 바로가기

Coding Test/BOJ

[백준/Python] 16564 히오스 프로게이머

문제 링크

 

16564번: 히오스 프로게이머

첫째 줄에는 캐릭터의 개수 N, 올릴 수 있는 레벨 총합 K가 주어진다. (1 ≤ N ≤1,000,000, 1 ≤ K ≤ 1,000,000,000) 다음 N개의 줄에는 현재 각 캐릭터의 레벨이 X1, X2, X3, ... , Xn 으로 주어진다. (1 ≤ Xi ≤

www.acmicpc.net

 

문제 풀이

  • 일반적인 이분 탐색 문제이다. 여기서 주의해야 할 점은 end 값 설정이다.
  • 만약 캐릭터 레벨의 총합(sum(arr))보다 k가 무수히 크다면 end 값은 단순히 총합이 아닌 총합과 k를 더한 값이 되어야 한다.

 

전체 코드

import sys

n, k = map(int, sys.stdin.readline().split())
arr = [int(sys.stdin.readline().strip()) for _ in range(n)]

start = 1
end = sum(arr) + k
res = 0
while start <= end:
    mid = (start + end) // 2
    total = 0
    for x in arr:
        if x < mid:
            total += mid - x
    if total > k:
        end = mid - 1
    else:
        res = max(res, mid)
        start = mid + 1

print(res)
반응형

'Coding Test > BOJ' 카테고리의 다른 글

[백준/Python] 13023 ABCDE  (0) 2024.03.07
[백준/Python] 1021 회전하는 큐  (0) 2024.02.25
[백준/Python] 2589 보물섬  (0) 2024.02.23
[백준/Python] 13164 행복 유치원  (0) 2024.02.22
[백준/Python] 12865 평범한 배낭  (0) 2024.02.20