Processing math: 100%
We will find a way, we always have.

-interstellar

Problem Solving/๋ฐฑ์ค€

[๋ฐฑ์ค€] 28357๋ฒˆ: ์‚ฌํƒ• ๋‚˜๋ˆ ์ฃผ๊ธฐ

Redddy 2023. 10. 8. 22:02

๐Ÿ”ˆ ๋ฌธ์ œ

์†Œ์ˆ˜์ „๊ณต ์ˆ˜์—…์„ ๋งˆ๋ฌด๋ฆฌํ•œ ์ฐฌ์šฐ๋Š” ์ถ•ํ•˜์˜ ์˜๋ฏธ๋กœ ํ•™์ƒ๋“ค์—๊ฒŒ ์‚ฌํƒ•์„ ๋‚˜๋ˆ„์–ด ์ฃผ๋ ค ํ•œ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ, ๊ธฐ์ค€์ด ๋˜๋Š” ์Œ์ด ์•„๋‹Œ ์ •์ˆ˜ X๋ฅผ ์ •ํ•œ ๋’ค ์ตœ์ข… ์ ์ˆ˜๊ฐ€ X์ ์„ ๋„˜๋Š” ํ•™์ƒ๋“ค์—๊ฒŒ ์ ์ˆ˜๊ฐ€ ๋†’์€ ๋งŒํผ ๋งŽ์€ ์‚ฌํƒ•์„ ์ค„ ๊ฒƒ์ด๋‹ค. ์ฆ‰, X+1์ ์„ ๋ฐ›์€ ํ•™์ƒ์€ 1๊ฐœ, X+2์ ์„ ๋ฐ›์€ ํ•™์ƒ์€ 2๊ฐœ, T(T>X)์ ์„ ๋ฐ›์€ ํ•™์ƒ์€ Tโˆ’X๊ฐœ์˜ ์‚ฌํƒ•์„ ๋ฐ›๊ฒŒ ๋œ๋‹ค.
์ฐฌ์šฐ๋Š” ํ•™์ƒ๋“ค์—๊ฒŒ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ์‚ฌํƒ•์„ ๋‚˜๋ˆ„์–ด์ฃผ๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์ค€ ์ ์ˆ˜ X๋ฅผ ๊ฐ€๋Šฅํ•œ ํ•œ ๋‚ฎ๊ฒŒ ์ •ํ•˜๋ ค ํ•œ๋‹ค. ํ•˜์ง€๋งŒ, ์ง€๊ธˆ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ˆ์œผ๋กœ๋Š” ์‚ฌํƒ•์„ K๊ฐœ๊นŒ์ง€๋งŒ ์‚ด ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌํƒ•์˜ ์ด ๊ฐœ์ˆ˜๊ฐ€ K๊ฐœ๋ฅผ ๋„˜์œผ๋ฉด ์•ˆ ๋œ๋‹ค.
์ฐฌ์šฐ์˜ ์ˆ˜์—…์€ ์ด N๋ช…์ด ์ˆ˜๊ฐ•ํ–ˆ๊ณ , i๋ฒˆ์งธ ํ•™์ƒ์€ Ai์ ์„ ๋ฐ›์•˜๋‹ค. ์ˆ˜๊ฐ•์ƒ์˜ ์ˆ˜์™€ ๊ฐ ํ•™์ƒ์˜ ์ ์ˆ˜, ์‚ฌํƒ•์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜ K๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ์ฐฌ์šฐ๋ฅผ ์œ„ํ•ด ๊ฐ€๋Šฅํ•œ X์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด ์ฃผ์ž.

 

๐Ÿ“์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ •์ˆ˜ N, K๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. (1โ‰คNโ‰ค5ร—105; 0โ‰คKโ‰ค1012)โ€Š
๋‘˜์งธ ์ค„์— N๊ฐœ์˜ ์ •์ˆ˜ A1,A2,โ‹ฏ,AN์ด ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. (0โ‰คAiโ‰ค1012)โ€Š

 

๐Ÿ“‘์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๊ฐ€๋Šฅํ•œ ๊ธฐ์ค€ X์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

๐Ÿ“š ๋ฌธ์ œ ํ’€์ด

 

X ์  ๋ณด๋‹ค ๋‚ฎ์€ ์ ์ˆ˜๋ฅผ ๋ฐ›์€ ํ•™์ƒ๋“ค์€ ๋ชจ๋‘ 0๊ฐœ์˜ ์‚ฌํƒ•์„ ๋ฐ›๊ฒŒ ๋œ๋‹ค. ๋•Œ๋ฌธ์— ์ ์ˆ˜๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ  ๊ฐ ์ ์ˆ˜๋งˆ๋‹ค T-X๋ฅผ ๊ณ„์‚ฐํ•˜๋‹ค๊ฐ€ T ๊ฐ€ X๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ ๋ฉˆ์ถค์œผ๋กœ์จ ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ๊ณผ ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ X๋Š” ์ด๋ถ„ํƒ์ƒ‰์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. 

 

๐Ÿ’ป ์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import sys
input = sys.stdin.readline
 
def canbe(x):
    res = 0
    for num in nums:
        if num > x:
            res += num-x
        else:
            break
 
    return res <= k
 
n,k = map(int,input().split())
nums = list(map(int,input().split()))
nums.sort(reverse=True)
 
st,ed = 0, nums[0]
res = 0
 
while st <= ed:
    mid = (st+ed)//2
    if canbe(mid):
        res = mid
        ed = mid - 1
    else:
        st = mid + 1
 
print(res)
cs

 

๐Ÿญ ์‹œํ–‰์ฐฉ์˜ค

 

์›ํŠธ์— ์„ฑ๊ณตํ•˜์˜€๋‹ค

 

๐Ÿ”— ๋ฌธ์ œ๋งํฌ

 

28357๋ฒˆ: ์‚ฌํƒ• ๋‚˜๋ˆ ์ฃผ๊ธฐ

์†Œ์ˆ˜์ „๊ณต ์ˆ˜์—…์„ ๋งˆ๋ฌด๋ฆฌํ•œ ์ฐฌ์šฐ๋Š” ์ถ•ํ•˜์˜ ์˜๋ฏธ๋กœ ํ•™์ƒ๋“ค์—๊ฒŒ ์‚ฌํƒ•์„ ๋‚˜๋ˆ„์–ด ์ฃผ๋ ค ํ•œ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ, ๊ธฐ์ค€์ด ๋˜๋Š” ์Œ์ด ์•„๋‹Œ ์ •์ˆ˜ X๋ฅผ ์ •ํ•œ ๋’ค ์ตœ์ข… ์ ์ˆ˜๊ฐ€ X์ ์„ ๋„˜๋Š” ํ•™์ƒ๋“ค์—๊ฒŒ ์ ์ˆ˜๊ฐ€ ๋†’์€

www.acmicpc.net