๋ฐฑ์ค€/Python

[Python] ๋ฐฑ์ค€ 2805๋ฒˆ

๋‹ค๋ธ”๐Ÿ’ 2022. 5. 24. 22:34

๋‚˜๋ฌด ์ž๋ฅด๊ธฐ (silver 3)

์ƒ๊ทผ์ด๋Š” ๋‚˜๋ฌด M๋ฏธํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๊ทผ์ฒ˜์— ๋‚˜๋ฌด๋ฅผ ๊ตฌ์ž…ํ•  ๊ณณ์ด ๋ชจ๋‘ ๋งํ•ด๋ฒ„๋ ธ๊ธฐ ๋•Œ๋ฌธ์—, ์ •๋ถ€์— ๋ฒŒ๋ชฉ ํ—ˆ๊ฐ€๋ฅผ ์š”์ฒญํ–ˆ๋‹ค. ์ •๋ถ€๋Š” ์ƒ๊ทผ์ด๋„ค ์ง‘ ๊ทผ์ฒ˜์˜ ๋‚˜๋ฌด ํ•œ ์ค„์— ๋Œ€ํ•œ ๋ฒŒ๋ชฉ ํ—ˆ๊ฐ€๋ฅผ ๋‚ด์ฃผ์—ˆ๊ณ , ์ƒ๊ทผ์ด๋Š” ์ƒˆ๋กœ ๊ตฌ์ž…ํ•œ ๋ชฉ์žฌ์ ˆ๋‹จ๊ธฐ๋ฅผ ์ด์šฉํ•ด์„œ ๋‚˜๋ฌด๋ฅผ ๊ตฌํ• ๊ฒƒ์ด๋‹ค.

๋ชฉ์žฌ์ ˆ๋‹จ๊ธฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค. ๋จผ์ €, ์ƒ๊ทผ์ด๋Š” ์ ˆ๋‹จ๊ธฐ์— ๋†’์ด H๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค. ๋†’์ด๋ฅผ ์ง€์ •ํ•˜๋ฉด ํ†ฑ๋‚ ์ด ๋•…์œผ๋กœ๋ถ€ํ„ฐ H๋ฏธํ„ฐ ์œ„๋กœ ์˜ฌ๋ผ๊ฐ„๋‹ค. ๊ทธ ๋‹ค์Œ, ํ•œ ์ค„์— ์—ฐ์†ํ•ด์žˆ๋Š” ๋‚˜๋ฌด๋ฅผ ๋ชจ๋‘ ์ ˆ๋‹จํ•ด๋ฒ„๋ฆฐ๋‹ค. ๋”ฐ๋ผ์„œ, ๋†’์ด๊ฐ€ H๋ณด๋‹ค ํฐ ๋‚˜๋ฌด๋Š” H ์œ„์˜ ๋ถ€๋ถ„์ด ์ž˜๋ฆด ๊ฒƒ์ด๊ณ , ๋‚ฎ์€ ๋‚˜๋ฌด๋Š” ์ž˜๋ฆฌ์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•œ ์ค„์— ์—ฐ์†ํ•ด์žˆ๋Š” ๋‚˜๋ฌด์˜ ๋†’์ด๊ฐ€ 20, 15, 10, 17์ด๋ผ๊ณ  ํ•˜์ž. ์ƒ๊ทผ์ด๊ฐ€ ๋†’์ด๋ฅผ 15๋กœ ์ง€์ •ํ–ˆ๋‹ค๋ฉด, ๋‚˜๋ฌด๋ฅผ ์ž๋ฅธ ๋’ค์˜ ๋†’์ด๋Š” 15, 15, 10, 15๊ฐ€ ๋  ๊ฒƒ์ด๊ณ , ์ƒ๊ทผ์ด๋Š” ๊ธธ์ด๊ฐ€ 5์ธ ๋‚˜๋ฌด์™€ 2์ธ ๋‚˜๋ฌด๋ฅผ ๋“ค๊ณ  ์ง‘์— ๊ฐˆ ๊ฒƒ์ด๋‹ค. (์ด 7๋ฏธํ„ฐ๋ฅผ ์ง‘์— ๋“ค๊ณ  ๊ฐ„๋‹ค) ์ ˆ๋‹จ๊ธฐ์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋†’์ด๋Š” ์–‘์˜ ์ •์ˆ˜ ๋˜๋Š” 0์ด๋‹ค.

์ƒ๊ทผ์ด๋Š” ํ™˜๊ฒฝ์— ๋งค์šฐ ๊ด€์‹ฌ์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์—, ๋‚˜๋ฌด๋ฅผ ํ•„์š”ํ•œ ๋งŒํผ๋งŒ ์ง‘์œผ๋กœ ๊ฐ€์ ธ๊ฐ€๋ ค๊ณ  ํ•œ๋‹ค. ์ด๋•Œ, ์ ์–ด๋„ M๋ฏธํ„ฐ์˜ ๋‚˜๋ฌด๋ฅผ ์ง‘์— ๊ฐ€์ ธ๊ฐ€๊ธฐ ์œ„ํ•ด์„œ ์ ˆ๋‹จ๊ธฐ์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋†’์ด์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋‚˜๋ฌด์˜ ์ˆ˜ N๊ณผ ์ƒ๊ทผ์ด๊ฐ€ ์ง‘์œผ๋กœ ๊ฐ€์ ธ๊ฐ€๋ ค๊ณ  ํ•˜๋Š” ๋‚˜๋ฌด์˜ ๊ธธ์ด M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000)

๋‘˜์งธ ์ค„์—๋Š” ๋‚˜๋ฌด์˜ ๋†’์ด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‚˜๋ฌด์˜ ๋†’์ด์˜ ํ•ฉ์€ ํ•ญ์ƒ M๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์—, ์ƒ๊ทผ์ด๋Š” ์ง‘์— ํ•„์š”ํ•œ ๋‚˜๋ฌด๋ฅผ ํ•ญ์ƒ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ๋†’์ด๋Š” 1,000,000,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์–‘์˜ ์ •์ˆ˜ ๋˜๋Š” 0์ด๋‹ค.

 

 

์ถœ๋ ฅ

์ ์–ด๋„ M๋ฏธํ„ฐ์˜ ๋‚˜๋ฌด๋ฅผ ์ง‘์— ๊ฐ€์ ธ๊ฐ€๊ธฐ ์œ„ํ•ด์„œ ์ ˆ๋‹จ๊ธฐ์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋†’์ด์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

์˜ˆ์ œ ์ž…๋ ฅ 1

4 7
20 15 10 17

 

 

 

 

์˜ˆ์ œ ์ถœ๋ ฅ 1

15

 

 

num, length = map(int, input("๋‚˜๋ฌด์˜ ์ˆ˜, ๊ฐ€์ ธ๊ฐ€์•ผ ํ•˜๋Š” ๊ธธ์ด : ").split())
tree = list(map(int, input("๋‚˜๋ฌด์˜ ๋†’์ด : ").split()))
start = 0
end = max(tree)

# ์ด๋ถ„ ํƒ์ƒ‰ ์ด์šฉ
while start <= end:
    len_sum = 0 # ๋‚˜๋ฌด ๊ธธ์ด์˜ ํ•ฉ
    mid = (start+end) // 2
    for i in tree:
        if i > mid:  # ํ‰๊ท ๋ณด๋‹ค ๊ธด ๋‚˜๋ฌด๋Š” ์ž˜๋ฆผ
            len_sum += i - mid
    if len_sum >= length:  # ์›ํ•˜๋Š” ๋‚˜๋ฌด์˜ ๊ธธ์ด๋ณด๋‹ค ๋งŽ์ด ์ž˜๋ ธ๋‹ค๋ฉด
        start = mid + 1    # ์‹œ์ž‘์  ์กฐ์ •
    else:                  # ์›ํ•˜๋Š” ๋‚˜๋ฌด์˜ ๊ธธ์ด๋ณด๋‹ค ๋œ ์ž˜๋ ธ๋‹ค๋ฉด 
        end = mid - 1      # ๋์  ์กฐ์ •
print("์ ˆ๋‹จ๊ธฐ์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋†’์ด์˜ ์ตœ๋Œ“๊ฐ’ : ", end)

์ด๋ถ„ ํƒ์ƒ‰(Binary Search) ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์ฃผ์—ˆ๋‹ค.

 

์ด๋ถ„ ํƒ์ƒ‰ 

: ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ์ •์ˆ˜์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ™์€ ํฌ๊ธฐ์˜ ๋‘ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋กœ ๋‚˜๋ˆ„๊ณ , ํ•„์š”ํ•œ ๋ถ€๋ถ„์—์„œ๋งŒ ํƒ์ƒ‰ํ•˜๋„๋ก ์ œํ•œํ•˜์—ฌ ์›ํ•˜๋Š” ์›์†Œ๋ฅผ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ๋ฆฌ์ŠคํŠธ์˜ ์ค‘๊ฐ„ ๋ถ€๋ถ„์— ์ฐพ๋Š” ์›์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
  • ์—†๋‹ค๋ฉด ์œ„์ชฝ์— ์žˆ๋Š”์ง€ ์•„๋ž˜์ชฝ์— ์žˆ๋Š”์ง€ ํŒ๋‹จํ•˜์—ฌ ๋งจ ์•ž๋ถ€ํ„ฐ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ์ค‘๊ฐ„๋ถ€ํ„ฐ ๊ฒ€์ƒ‰ํ•œ๋‹ค.

์‹œ์ž‘์ ๊ณผ ๋์ ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๋™์•ˆ while๋ฌธ์ด ์ง„ํ–‰๋˜๋„๋ก ํ•ด์ฃผ์—ˆ๋‹ค.

mid๊ฐ’์„ ๋ฆฌ์ŠคํŠธ์˜ ์ค‘๊ฐ„ ๋ถ€๋ถ„์œผ๋กœ ์ €์žฅํ•˜๊ณ , for๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ tree ๋ฆฌ์ŠคํŠธ์— ์ž…๋ ฅ ๋ฐ›์€ ์›์†Œ์— ๋Œ€ํ•ด ํ‰๊ท (mid)๋ณด๋‹ค ๊ธด ๋‚˜๋ฌด๋Š” ์ž˜๋ผ์„œ len_sum์— (๋‚˜๋ฌด๊ธธ์ด - ํ‰๊ท )๋งŒํผ ๋”ํ•ด์ฃผ์—ˆ๋‹ค.

if๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ์›ํ•˜๋Š” ๋‚˜๋ฌด์˜ ๊ธธ์ด length๋ณด๋‹ค ์ž๋ฅธ ๋‚˜๋ฌด์˜ ๊ธธ์ด len_sum์ด ๋” ํด ๊ฒฝ์šฐ ์‹œ์ž‘์  start๋ฅผ mid +1๋กœ ์ €์žฅํ•ด์ฃผ์—ˆ๊ณ , ๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ์—๋Š” ๋ ์ ์— ํ•ด๋‹นํ•˜๋Š” end๋ฅผ mid - 1๋กœ ์กฐ์ •ํ•ด์ฃผ์—ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์ ˆ๋‹จ๊ธฐ์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋†’์ด์˜ ์ตœ๋Œ“๊ฐ’์ธ end๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ์—ˆ๋‹ค.

 

 

 

์ฐธ๊ณ  https://data-flower.tistory.com/99

'๋ฐฑ์ค€ > Python' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Python] ๋ฐฑ์ค€ 1654๋ฒˆ  (0) 2022.05.31
[Python] ๋ฐฑ์ค€ 11651๋ฒˆ  (0) 2022.05.25
[Python] ๋ฐฑ์ค€_4949๋ฒˆ  (0) 2022.05.15
[Python] ๋ฐฑ์ค€_ 4150๋ฒˆ  (0) 2022.05.08
[Python] ๋ฐฑ์ค€_2581๋ฒˆ  (0) 2022.05.08