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 |