๋ฐฑ์ค€/Python

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

๋‹ค๋ธ”๐Ÿ’ 2022. 5. 31. 00:28

1654๋ฒˆ. ๋žœ์„  ์ž๋ฅด๊ธฐ (silver 3)

์ง‘์—์„œ ์‹œ๊ฐ„์„ ๋ณด๋‚ด๋˜ ์˜ค์˜์‹์€ ๋ฐ•์„ฑ์›์˜ ๋ถ€๋ฆ„์„ ๋ฐ›๊ณ  ๊ธ‰ํžˆ ๋‹ฌ๋ ค์™”๋‹ค. ๋ฐ•์„ฑ์›์ด ์บ ํ”„ ๋•Œ ์“ธ N๊ฐœ์˜ ๋žœ์„ ์„ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š”๋ฐ ๋„ˆ๋ฌด ๋ฐ”๋น ์„œ ์˜์‹์ด์—๊ฒŒ ๋„์›€์„ ์ฒญํ–ˆ๋‹ค.

์ด๋ฏธ ์˜ค์˜์‹์€ ์ž์ฒด์ ์œผ๋กœ K๊ฐœ์˜ ๋žœ์„ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ K๊ฐœ์˜ ๋žœ์„ ์€ ๊ธธ์ด๊ฐ€ ์ œ๊ฐ๊ฐ์ด๋‹ค. ๋ฐ•์„ฑ์›์€ ๋žœ์„ ์„ ๋ชจ๋‘ N๊ฐœ์˜ ๊ฐ™์€ ๊ธธ์ด์˜ ๋žœ์„ ์œผ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— K๊ฐœ์˜ ๋žœ์„ ์„ ์ž˜๋ผ์„œ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 300cm ์งœ๋ฆฌ ๋žœ์„ ์—์„œ 140cm ์งœ๋ฆฌ ๋žœ์„ ์„ ๋‘ ๊ฐœ ์ž˜๋ผ๋‚ด๋ฉด 20cm๋Š” ๋ฒ„๋ ค์•ผ ํ•œ๋‹ค. (์ด๋ฏธ ์ž๋ฅธ ๋žœ์„ ์€ ๋ถ™์ผ ์ˆ˜ ์—†๋‹ค.)

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

 

 

์ž…๋ ฅ

 

์ฒซ์งธ ์ค„์—๋Š” ์˜ค์˜์‹์ด ์ด๋ฏธ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋žœ์„ ์˜ ๊ฐœ์ˆ˜ K, ๊ทธ๋ฆฌ๊ณ  ํ•„์š”ํ•œ ๋žœ์„ ์˜ ๊ฐœ์ˆ˜ N์ด ์ž…๋ ฅ๋œ๋‹ค. K๋Š” 1์ด์ƒ 10,000์ดํ•˜์˜ ์ •์ˆ˜์ด๊ณ , N์€ 1์ด์ƒ 1,000,000์ดํ•˜์˜ ์ •์ˆ˜์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•ญ์ƒ K โ‰ฆ N ์ด๋‹ค.

๊ทธ ํ›„ K์ค„์— ๊ฑธ์ณ ์ด๋ฏธ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ ๋žœ์„ ์˜ ๊ธธ์ด๊ฐ€ ์„ผํ‹ฐ๋ฏธํ„ฐ ๋‹จ์œ„์˜ ์ •์ˆ˜๋กœ ์ž…๋ ฅ๋œ๋‹ค. ๋žœ์„ ์˜ ๊ธธ์ด๋Š” 231-1๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— N๊ฐœ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋žœ์„ ์˜ ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ์„ผํ‹ฐ๋ฏธํ„ฐ ๋‹จ์œ„์˜ ์ •์ˆ˜๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

 

์ง€๋‚œ๋ฒˆ์— ํ’€์—ˆ๋˜ ๋‚˜๋ฌด์ž๋ฅด๊ธฐ ๋ฌธ์ œ์™€ ๊ต‰์žฅํžˆ ์œ ์‚ฌํ•œ ๋ฌธ์ œ์ด๋‹ค.

์ด ๋ฌธ์ œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ binary search(์ด์ง„ํƒ์ƒ‰)๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ’€์–ด์ฃผ์—ˆ๋‹ค.

 

์ด์ง„ ํƒ์ƒ‰์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1. ์ •๋ ฌ๋œ ์›์†Œ ๋ฆฌ์ŠคํŠธ์—์„œ ์ค‘๊ฐ„ ๊ฐ’(median)์˜ ์œ„์น˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
2. ํƒ์ƒ‰ ํ‚ค์™€ ์ค‘๊ฐ„ ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ์ผ์น˜ํ•˜๋ฉด ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ข…๋ฃŒํ•œ๋‹ค.
3. ํƒ์ƒ‰ ํ‚ค๊ฐ€ ์ค‘๊ฐ„ ๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฉด ์ค‘๊ฐ„ ๊ฐ’์˜ ์™ผ์ชฝ ๋ฆฌ์ŠคํŠธ๋กœ ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ , ์ค‘๊ฐ„ ๊ฐ’๋ณด๋‹ค ํฌ๋ฉด ์˜ค๋ฅธ์ชฝ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.
4. ๋ณ€๊ฒฝ๋œ ํƒ์ƒ‰ ๋ฒ”์œ„์— ๋น„๊ตํ•  ์›์†Œ๊ฐ€ ์กด์žฌํ•˜๋ฉด ๊ณผ์ •(1)๋ฒˆ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋ฐ˜๋ณตํ•œ๋‹ค.
5. ํƒ์ƒ‰ ๋ฒ”์œ„์— ์›์†Œ๊ฐ€ ์—†์œผ๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ํƒ์ƒ‰์„ ์ข…๋ฃŒํ•œ๋‹ค.

 

์ด์ง„ ํƒ์ƒ‰์—์„œ๋Š” ์ฐพ๊ณ  ์‹ถ์€ ํƒ์ƒ‰ ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ๋ฐ”๊ฟ”๋‚˜๊ฐ”๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋ฌธ์ œ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ์ตœ๋Œ€ ๋žœ์„ ์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, start๋Š” 1๋กœ ์„ค์ •ํ•˜๊ณ , end์˜ ๋ฒ”์œ„๋ฅผ length์— ๋‹ด๊ธด ์ˆซ์ž ์ค‘ ์ตœ๋Œ“๊ฐ’์œผ๋กœ ์„ค์ •ํ•ด์ฃผ์—ˆ๋‹ค.

์—ฌ๊ธฐ์„œ length๋Š” ๋žœ์„ ์˜ ๊ธธ์ด๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด์ด๋‹ค.

while๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ์ค‘๊ฐ„ ๊ฐ’์„ (start+end) / / 2 ๊ฐ’์œผ๋กœ ์ €์žฅํ•˜๊ณ  cnt์—๋Š” ์ž๋ฅธ ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•ด์ฃผ์—ˆ๋‹ค.

n๊ฐœ๋ณด๋‹ค ๋งŽ์ด ๋งŒ๋“ ๊ฒฝ์šฐ, ์ฆ‰ cnt๊ฐ€ n๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” start์˜ ๊ฐ’์„ mid  + 1๋กœ ์ €์žฅํ•ด์„œ ์ž๋ฅด๋Š” ๋ฒ”์œ„๋ฅผ ํฌ๊ฒŒ ํ•ด์ฃผ์—ˆ๊ณ , 

๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ end์— mid - 1์„ ์ €์žฅํ•ด์„œ ๋‹ค์‹œ while๋ฌธ์„ ๋ฐ˜๋ณตํ•˜๋„๋ก ํ•ด์ฃผ์—ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ start์™€ end๊ฐ€ ๊ฐ™์•„์งˆ ๋•Œ ๊ทธ ๋•Œ์˜ ์ตœ๋Œ€๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” end๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

k, n = map(int, input().split())

length = []
for i in range(k):
    length.append(int(input()))
    
start, end = 1, max(length)       # ๋žœ์„ ์˜ ์ตœ์†Œ ๊ธธ์ด, ๋žœ์„  ๊ธธ์ด ์ค‘ ๊ฐ€์žฅ ๊ธด ๊ธธ์ด 

while start <= end:             # ์ด๋ถ„ ํƒ์ƒ‰
    mid = (start + end) // 2     # ์ค‘๊ฐ„๊ฐ’
    cnt = 0
    for j in range(k):
        cnt += length[j] // mid
    if cnt >= n:   # ์ž˜๋ผ๋‚ธ ๊ฐœ์ˆ˜๊ฐ€ ๊ธฐ์ค€(n)๋ณด๋‹ค ๋งŽ์œผ๋ฉด mid ์œ„์˜ ๊ฐ’ ์‚ดํŽด๋ณด๊ธฐ 
        start = mid + 1
    else:
        end = mid - 1
print(end)   # ์ตœ๋Œ€ ๋žœ์„  ๊ธธ์ด ์ถœ๋ ฅ

 

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

[Python] ๋ฐฑ์ค€ 11650๋ฒˆ  (0) 2022.05.31
[Python] ๋ฐฑ์ค€ 1920๋ฒˆ  (0) 2022.05.31
[Python] ๋ฐฑ์ค€ 11651๋ฒˆ  (0) 2022.05.25
[Python] ๋ฐฑ์ค€ 2805๋ฒˆ  (0) 2022.05.24
[Python] ๋ฐฑ์ค€_4949๋ฒˆ  (0) 2022.05.15