PS
[๋ฐฑ์ค] 2548 ๋ํ ์์ฐ์ with Python
ํ์ค_It's
2022. 7. 12. 15:52
728x90
๋ฐ์ํ
๐ BOJ 2548 ๋ํ ์์ฐ์
๐ก ์กฐ๊ฑด
- ์ ๋ณด์ด๋ฑํ๊ต์ ์ฐ์๋ ์ฌ๋ฌ ๊ฐ์ ์์ฐ์๊ฐ ์ฃผ์ด์ก์ ๋, ์ด๋ฅผ ๋ํํ ์ ์๋ ๋ํ ์์ฐ์์ ๋ํ์ฌ ์ฐ๊ตฌํ์๋ค.
๊ทธ ๊ฒฐ๊ณผ ์ด๋ค ์์ฐ์๊ฐ ๋ค์๊ณผ ๊ฐ์ ์ฑ์ง์ ๊ฐ์ง๋ฉด ๋ํ ์์ฐ์๋ก ์ ๋นํ ๊ฒ์ด๋ผ๊ณ ํ๋จํ์๋ค.
โ๋ํ ์์ฐ์๋ ์ฃผ์ด์ง ๋ชจ๋ ์์ฐ์๋ค์ ๋ํ์ฌ ๊ทธ ์ฐจ์ด๋ฅผ ๊ณ์ฐํ์ฌ ๊ทธ ์ฐจ์ด๋ค ์ ์ฒด์ ํฉ์ ์ต์๋ก ํ๋ ์์ฐ์์ด๋ค.โ
- ์๋ฅผ ๋ค์ด ์ฃผ์ด์ง ์์ฐ์๋ค์ด [4, 3, 2, 2, 9, 10]์ด๋ผ ํ์.
์ด๋ ๋ํ ์์ฐ์๋ 3 ํน์ 4๊ฐ ๋๋ค.
์๋ํ๋ฉด (4์ 3์ ์ฐจ์ด) + (3๊ณผ 3์ ์ฐจ์ด) + (2์ 3์ ์ฐจ์ด) + (2์ 3์ ์ฐจ์ด) + (9์ 3์ ์ฐจ์ด) + (10๊ณผ 3์ ์ฐจ์ด) = 16,
(4์ 4์ ์ฐจ์ด) + (3๊ณผ 4์ ์ฐจ์ด) + (2์ 4์ ์ฐจ์ด) + (2์ 4์ ์ฐจ์ด) + (9์ 4์ ์ฐจ์ด) + (10๊ณผ 4์ ์ฐจ์ด) = 16์ผ๋ก ๊ฐ๋ค.
- ์ฒซ์งธ ์ค์๋ ์์ฐ์์ ๊ฐ์ N์ด ์
๋ ฅ๋๋ค. N์ 1 ์ด์ 20,000 ์ดํ์ด๋ค.
๋์งธ ์ค์๋ N๊ฐ์ ์์ฐ์๊ฐ ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ ๋ ฅ๋๋ฉฐ, ์ด ์๋ค์ ๋ชจ๋ 1 ์ด์ 10,000 ์ดํ์ด๋ค.
- ์ด๋ถํ์, ์ ๋ ฌ ์ ํ์ ๋ฌธ์
๐ฅ ์์ค ์ฝ๋
from sys import stdin
n = int(stdin.readline())
arr = list(map(int, stdin.readline().split()))
arr.sort()
l, r = 0, n
res = int(1e9)
ans = max(arr)
while l <= r:
mid = (l + r) // 2
temp = sum([abs(x - arr[mid]) for x in arr])
if temp <= res:
ans = min(ans, arr[mid])
res = temp
r = mid - 1
else:
l = mid + 1
print(ans)
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์
6
4 3 2 2 9 10
์คํ๊ฒฐ๊ณผ
3
โจ๏ธ ๋ฌธ์ ํ์ด
- ์ด ๋ฌธ์ ๋ ์ด๋ถํ์ ๋ฌธ์ ์ด๋ค. N์ด ์ต๋ 20000 ์ด๊ณ , ๊ฐ ์ซ์์ ์ฐจ์ด๋ฅผ ์ผ์ผํ ๊ตฌํ๋ฉด ๋ฐ๋์ TLE ์ด๋ค.
- ์ต์๊ฐ์ 0์ผ๋ก, ์ต๋๊ฐ์ int(1e9)๋ก ๋ ๋ค, ์ด๋ถํ์์ ํตํด์ mid ๊ฐ์ ์ ํด์ค๋ค
- ์ ํด์ค mid ๊ฐ์ผ๋ก ์ ๋ ฅ๋ฐ์ ๋ฆฌ์คํธ์ ๊ฐ ์์๊ฐ๊ณผ์ ์ฐจ์ด๋ฅผ ๋ํด ์ต์๊ฐ ๋๋์ง ๊ณ์ฐํ๋ค.
- ๊ณ์ฐํ ๋ํ ์์ฐ์๊ฐ ๊ธฐ์กด์ ๋ํ ์์ฐ์๋ณด๋ค ์๋ค๋ฉด ๊ฐฑ์ ํด์ค๋ค.
๋ฐ์ํ