2020. 8. 31. 14:30ใ์ด๊ฒ์ด ์ฝ๋ฉํ ์คํธ๋ค/ํ์
๋ก๋ณถ์ด ๋ก ๋ง๋ค๊ธฐ(Python)
๋ฌธ์ : ์ค๋ ๋๋น์ด๋ ์ฌํ ๊ฐ์ ๋ถ๋ชจ๋์ ๋์ ํด์ ๋ก์ง ์ผ์ ํ๊ธฐ๋ก ํ๋ค. ์ค๋์ ๋ก๋ณถ์ด ๋ก์ ๋ง๋๋ ๋ ์ด๋ค. ๋๋น์ด๋ค ๋ก๋ณถ์ด ๋ก์ ์ฌ๋ฐ๊ฒ๋ ๋ก๋ณถ์ด ๋ก์ ๊ธธ์ด๊ฐ ์ผ์ ํ์ง ์๋ค. ๋์ ์ ํ๋ด์ง ์์ ๋ค์ด๊ฐ๋ ๋ก์ ์ด ๊ธธ์ด๋ ์ ๋จ๊ธฐ๋ก ์๋ผ์ ๋ง์ถฐ์ค๋ค.
์ ๋จ๊ธฐ์ ๋์ด(H)๋ฅผ ์ง์ ํ๋ฉด ์ค์ง์ด์ง ๋ก์ ํ ๋ฒ์ ์ ๋จํ๋ค. ๋์ด๊ฐ H๋ณด๋ค ๊ธด ๋ก์ H ์์ ๋ถ๋ถ์ด ์๋ฆด ๊ฒ์ด๊ณ , ๋ฎ์ ๋ก์ ์๋ฆฌ์ง ์๋๋ค.
์๋ฅผ ๋ค์ด ๋์ด๊ฐ 19, 14, 10, 17cm์ธ ๋ก์ด ๋๋ํ ์๊ณ ์ ๋จ๊ธฐ ๋์ด๋ฅผ 15cm๋ก ์ง์ ํ๋ฉด ์๋ฅธ ๋ค ๋ก์ ๋์ด๋ 15, 14, 10, 15cm๊ฐ ๋ ๊ฒ์ด๋ค. ์๋ฆฐ ๋ก์ ๊ธธ์ด๋ ์ฐจ๋ก๋๋ก 4, 0, 0, 2cm์ด๋ค. ์๋์ 6cm๋งํผ์ ๊ธธ์ด๋ฅผ ๊ฐ์ ธ๊ฐ๋ค.
์๋์ด ์์ ๋ ์์ฒญํ ์ด ๊ธธ์ด๊ฐ M์ผ ๋ ์ ์ด๋ M๋งํผ์ ๋ก์ ์ป๊ธฐ ์ํด ์ ๋จ๊ธฐ์ ์ค์ ํ ์ ์๋ ๋์ด์ ์ต๋๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ ์กฐ๊ฑด
- ์ฒซ์งธ ์ค์ ๋ก์ ๊ฐ์ N๊ณผ ์์ฒญํ ๋ก์ ๊ธธ์ด M์ด ์ฃผ์ด์ง๋ค.(1<=N<=1,000,000, 1<=M<=2,000,000,000)
- ๋์งธ ์ค์๋ ๋ก์ ๊ฐ๋ณ ๋์ด๊ฐ ์ฃผ์ด์ง๋ค. ๋ก ๋์ด์ ์ดํฉ์ ํญ์ M ์ด์์ด๋ฏ๋ก, ์๋์ ํ์ํ ์๋งํผ ๋ก์ ์ฌ๊ฐ ์ ์๋ค. ๋์ด๋ 10์ต๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ ์ ์ ๋๋ 0์ด๋ค.
์ถ๋ ฅ ์กฐ๊ฑด
- ์ ์ด๋ M๋งํผ์ ๋ก์ ์ง์ ๊ฐ์ ธ๊ฐ๊ธฐ ์ํด ์ ๋จ๊ธฐ์ ์ค์ ํ ์ ์๋ ๋์ด์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
์ด ๋ฌธ์ ๋ ๋์ ํ ๊ฐ์ด ์์์ ์งง์์๊ฐ ๊ณ ๋ฏผํ์ ํ์ด๋ฅผ ์ฐพ์๋ณด์๋ค.
ํ์ด์๋ ํ๋ผ๋ฉํธ๋ฆญ ์์น๋ผ๋ ๊ฐ๋ ์ด ๋ฑ์ฅํ๋๋ฐ, ์ด๋ '์ต์ ํ ๋ฌธ์ ๋ฅผ ๊ฒฐ์ ๋ฌธ์ '๋ก ๋ฐ๊พธ์ด ํด๊ฒฐํ๋ ๊ธฐ๋ฒ์ด๋ค. ๋ฌธ์ ๋ฅผ ๋ณด๊ณ '100๋ง๊ฐ์ ๋ก์ด ์ฃผ์ด์ง๋๋ฐ ์ด๊ฑธ ํ๋ํ๋ ์ด๋ป๊ฒ ๋ฃ์ง?' ์๊ฐ์ ํ๋๋ฐ ํ์ด๋ฅผ ๋ณด๋ ์์ฃผ ๊ฐ๋จํ๊ฒ ๊ตฌํ์ด ๋์๋ค. ์ด ๋ฌธ์ ์์ ํ๋ผ๋ฉํธ๋ฆญ ์์น๊ฐ ์ด๋ป๊ฒ ์ฌ์ฉ๋์๋์ง ์ดํด๋ณด์.
์ ๋จ๊ธฐ์ ๋์ด๋ 1๋ถํฐ 10์ต๊น์ง์ ์์ด๋ค. ์ด๋ ๋๋จํ ํฐ์๋ผ๋ ๊ฑธ ์ ์ ์๊ณ , ์ฐ๋ฆฌ๋ ์ ๋จ๊ธฐ์ ๋์ด๋ฅผ ์ค์ ์ผ๋ก ๋ฌธ์ ๋ฅผ ํ์ด๋๊ฐ์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด์ง ํ์์ ๋ ์ฌ๋ ธ์ด์ผ ํ๋ค. ์์ฐจํ์์ ์์๋ก ๋ค์ด๋ณด๋ฉด ์ต์ ์ ๊ฒฝ์ฐ์๋ 1๋ถํฐ 10์ต๊น์ง 10์ต๋ฒ์ ๋น๊ต์ ๋ก์ ๊ฐ์๊ฐ 100๋ง๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ง๋ ์๋๋ ๊ฐ์ด ๋์จ๋ค. ๊ทธ๋ ๊ธฐ์ ์ด ๋ฌธ์ ๋ ๋ฐ๋์ ์ด์ง ํ์์ผ๋ก ํ์ด์ผ๋ง ํ๋ค.
์ด์ง ํ์์ด๋ผ๋ฉด ๋์ด๊ฐ 10์ต๊น์ง์ ๊ฒฝ์ฐ์๋ ๋๋ต 31๋ฒ๋ง์ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ชจ๋ ๊ณ ๋ คํ ์ ์๋ค. (log10์ต์ ์๊ฐํด๋ณด๋ฉด ์ ์ ์๋ค.) ๊ทธ ์์ ๋ก์ ๊ฐ์๊ฐ 100๋ง๊ฐ๋ผ๊ณ ํด๋ ์ฝ 3000๋ง ๋ฒ ์ ๋์ ์ฐ์ฐ์ผ๋ก ํด๊ฒฐ์ด ๊ฐ๋ฅํ๋ค.
๋ฌธ์ ํด๊ฒฐ
1. start์ end๋ฅผ ๊ฐ์ฅ ๊ธด ๋ก์ ๊ธฐ์ค์ผ๋ก ์ ํ๋ค. (start=0, end=๊ฐ์ฅ ๊ธด๋ก์ ๊ธธ์ด)--->๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ๋ง๋ค ์ ์๋ค.
2. mid๊ฐ์ผ๋ก ๋ค ์๋ฅธ ๋ค ๋จ๋ ๋ก์ ๊ธธ์ด์ ์ดํฉ์ด ์๊ตฌํ๋ ๋ก์ ๊ธธ์ด๋ณด๋ค ์๋ค๋ฉด end๋ฅผ mid-1๋ก ์ฃผ์ด ๋ค์ start์ end๋ฅผ ํตํด mid๋ฅผ ์ค์ ํ๋ค. ๋ฐ๋์ ๊ฒฝ์ฐ์๋ start๋ฅผ mid+1๋ก ์ฃผ๋ฉด ๋๋ค.
3. ์ ๋จ๊ธฐ ๋์ด์ ์ต๋๊ฐ์ ๊ตฌํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ก์ ๊ธธ์ด๊ฐ ๊ฐ์ง ์์๋ ๋๋ค. ๋์ ์ ๋ก์ด ๋ ๋ง๊ฑฐ๋ ๊ฐ์์ผํ๋ค. ๋๋ฌธ์ ๋ก์ด ๋จ๋ ๊ฒฝ์ฐ์๋ result = mid๋ฅผ ๋จผ์ ์ฃผ์ด์ผํ๋ค.
์์ค ์ฝ๋
n,m = map(int,input().split())
array = list(map(int, input().split()))
result = 0
start =0
end = max(array)
while (start <= end):
mid = (start+end)//2
total =0
for i in array:
if i > mid :
total += i-mid
if total < m :
end = mid-1
else :
result = mid
start = mid+1
print(result)
๋ฌธ์ ๋ฅผ ํตํด ์๊ฒ ๋ ์
๋ก์ ๊ฐ๋ณ ๋์ด๋ array = list(map(int,input()))์ ํตํด ๋ฐ๋ก ์ ๊ทผํ ์ ์๋ค.
๋ด๊ฐ ํ๋ ํ์ด :
box=0
for i in input().split():
(box++) = i -->ํ์ด์ฌ์์ ์ค๋ฅ ++์ฐ์ฐ์ด ๋์ง ์๋๋ค.
๋ฌธ์ ์ ํต์ฌ์ start๊ฐ end๋ณด๋ค ํฌ๋ฉด ๋ฐ๋ก ๋ฐ๋ณต๋ฌธ์ ์ข
๋ฃํ๋ค๋ ๊ฒ์ด๋ค.
์ด์งํ์๋ฌธ์ ์ ์์ด ์ด ๊ฐ๋
์ด ์ดํด๊ฐ ๋์ง ์๋๋ค๋ฉด ์ซ์๋ฅผ ๋์
ํด ํด๋ณด๋ ๊ฑธ ์ถ์ฒํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฐ๋ณต๋ฌธ ๋ด๋ถ์ else๋ฌธ์ total์ด ํฌ๊ฑฐ๋ ๊ฐ๋ค๋ก ์ฃผ๋ ๊ฒ์ด ๋ง๋ค. toal๊ณผ m์ด ๊ฐ์ ๋ ์ข
๋ฃํ๋ ๊ฑด
๋น์ฐํ๊ณ , ์ฐจ๋ผ๋ฆฌ total์ด ์๊ตฌํ ๊ฐ๋ณด๋ค 1์ด๋ผ๋ ๋ ํฐ๊ฒ์ด ์ต๋๊ฐ์ด๋ผ๊ณ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด์งํ์ ์ฝ๋๋ ์๋นํ ์ค์ํ ๊ฐ๋
์ด๊ธฐ ๋๋ฌธ์ ์ธ์์ ์ฌ์ฉํ๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ด๋ค.
'์ด๊ฒ์ด ์ฝ๋ฉํ ์คํธ๋ค > ํ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ถํ ์ฐพ๊ธฐ(Python) - ์ด๊ฒ์ด ์ฝ๋ฉํ ์คํธ๋ค (0) | 2020.08.28 |
---|---|
์ด์ง ํ์(Python) (0) | 2020.08.28 |