๐ค๋ฌธ์ ํด๊ฒฐ
S1 | ์ด๋ถ ํ์
์ด๋ถ ํ์ ๋ฌธ์ ๋ ๋ฌด์์ ํ์ ํ ๊ฒ์ธ์ง๊ฐ ๊ฐ์ฅ ์ค์ํฉ๋๋ค.
์ด ๋ฌธ์ ์์๋ ๋ธ๋ฃจ๋ ์ด์ ์ต์ ํฌ๊ธฐ ๋ฅผ ์ฐพ์์ผ ํฉ๋๋ค.
์ฒ์์ ๊ฐ๊ฐ์ ๋ธ๋ฃจ๋ ์ด์ ๋ ์จ๋ค์ ์์๋๋ก ๋ด์์ผ ํฉ๋๋ค.
๋ธ๋ฃจ๋ ์ด์ ํฌ๊ธฐ๊ฐ 11๋ผ๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ ๊ฒ ๋๋ฉด ๋ ์จ๋ค์ ํฉ์ด 11์ ๋์ด์๋ ์๋ฉ๋๋ค.
๊ทธ๋ผ ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
์ด 5๊ฐ์ ๋ธ๋ฃจ๋ ์ด์ ๋ด์์ผ ํฉ๋๋ค. ํ ์คํธ ์ผ์ด์ค์์๋ 3๊ฐ์ ๋ด์ผ๋ผ๊ณ ํ์ผ๋ ๋ต์ด ๋ ์ ์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ธ๋ฃจ๋ ์ด ํฌ๊ธฐ๋ฅผ ๋๋ ค์ ํ ๋ธ๋ฃจ๋ ์ด์ ์ข ๋ ๋ง์ด ๋ด์์ผ ๊ฒ ๋ค๋ ์๊ฐ์ ํ ์ ์์ต๋๋ค.
15๋ผ๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
์ด 4๊ฐ์ ๋ธ๋ฃจ๋ ์ด์ ๋ด์์ต๋๋ค. ํ์ง๋ง ์ฌ์ ํ ๋ธ๋ฃจ๋ ์ด ๊ฐ์๊ฐ ๋ง์ต๋๋ค. ๋ธ๋ฃจ๋ ์ด์ ํฌ๊ธฐ๋ฅผ ๋ ๋๋ ค์ผ ํฉ๋๋ค.
๋ง์ฝ 30์ผ๋ก ํฌ๊ธฐ๋ฅผ ๋๋ฆฌ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
๋ธ๋ฃจ๋ ์ด๊ฐ 2๊ฐ ๋ฐ์ ๋์ค์ง ์์ ์ด๊ฒ๋ ๋ต์ด ๋ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ๋ธ๋ฃจ๋ ์ด์ ๊ฐ์๊ฐ ๋ง์ผ๋ฉด ๋ธ๋ฃจ๋ ์ด ํฌ๊ธฐ๋ฅผ ๋๋ฆฌ๊ณ , ๋ธ๋ฃจ๋ ์ด ๊ฐ์๊ฐ ์ ์ผ๋ฉด ๋ธ๋ฃจ๋ ์ด ํฌ๊ธฐ๋ฅผ ์ค์ฌ๊ฐ๋ฉฐ ์ด๋ถํ์ ์ ํ๋ฉด ๋ฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ฌ๊ธฐ์ ๋ธ๋ฃจ๋ ์ด์ ํฌ๊ธฐ๋ฅผ ์ ํ๋๊ฒ ์ค์ํฉ๋๋ค. ๋ธ๋ฃจ๋ ์ด๋ฅผ ํ๋์ ๋ด๋ ํฌ๊ธฐ๋ ๋ ์จ๋ค์ ํฉ์ ๋๋ค.
์ฌ๊ธฐ์ ๋ธ๋ฃจ๋ ์ด๊ฐ 45(๋ ์จ๋ค์ ํฉ)์ด์์ด๋ฉด ๋ธ๋ฃจ๋ ์ด ํ๋์ ๋ชจ๋ ๋ ์จ์ ๋ด์ ์ ์์ต๋๋ค.
๋, ๋ธ๋ฃจ๋ ์ด๊ฐ ์ต์ 9(๋ ์จ๋ค ์ค ์ ์ผ ํฐ ๊ฐ)๋ ๋์ด์ผ ๋ธ๋ฃจ๋ ์ด์ ๋ชจ๋ ๋ ์จ์ ๋ด์ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ์ผ์ชฝ๊ฐ์ 9, ์ค๋ฅธ์ชฝ ๊ฐ์ 45๋ก ๋๊ณ , ๋ ๊ฐ์ ์ค๊ฐ๊ฐ((9+45)//2)์ ๋ธ๋ฃจ๋ ์ด์ ํฌ๊ธฐ๋ก ์์ํฉ๋๋ค.
- ๋จผ์ ์ผ์ชฝ, ์ค๋ฅธ์ชฝ, ์ค๊ฐ๊ฐ์ ์ด๊ธฐํ ํฉ๋๋ค. (์์์ ์ค๋ช )
- ๋ธ๋ฃจ๋ ์ด ํฌ๊ธฐ์ ๋ฐ๋ผ์ ๋ ์จ๋ค์ ๊ฐ์ ์ฐจ๋ก์ฐจ๋ก ๋ํด์ ๋ฃ์ด๋ณด๊ณ ๊ทธ ํฌ๊ธฐ๋ฅผ ๋์ด๊ฐ ๋๋ง๋ค ๋ธ๋ฃจ๋ ์ด ๊ฐ์๋ฅผ +1์ฉ ํด์ค๋๋ค.
- ์ด์ ๋ธ๋ฃจ๋ ์ด์ ๊ฐ์์ ๋ฐ๋ผ ํฌ๊ธฐ๋ฅผ ๋๋ฆด์ง ์ค์ผ์ง ์ ํฉ๋๋ค.
- ๋ธ๋ฃจ๋ ์ด ๊ฐ์๊ฐ ๋ถ์กฑํ๋ค๋ฉด right = mid - 1 ์ ํด์ค์ ๋ธ๋ฃจ๋ ์ด ํฌ๊ธฐ๋ฅผ ์ค์ ๋๋ค.
- ๋ธ๋ฃจ๋ ์ด ๊ฐ์๊ฐ ๋์ด๊ฐ๋ค๋ฉด left = mid + 1 ์ ํด์ค์ ๋ธ๋ฃจ๋ ์ด ํฌ๊ธฐ๋ฅผ ๋๋ฆฝ๋๋ค.
- ๋ง์ง๋ง์ผ๋ก left ๋ฅผ ์ถ๋ ฅํ๋ฉด ๋ต์ด ๋ฉ๋๋ค.
๐ป์์ค ์ฝ๋
def add_lesson():
cnt = 0 # ๋ ์ฝ๋ ๊ฐฏ์ ์ธ๊ธฐ
sum_lesson = 0 # ํ ๋ ์ฝ๋์ ๋ค์ด๊ฐ ๋ ์จ๋ค์ ํฉ
for i in range(N):
if sum_lesson + lesson_list[i] > mid:
cnt += 1
sum_lesson = 0
sum_lesson += lesson_list[i]
else:
if sum_lesson:
cnt += 1
return cnt
if __name__ == "__main__":
N, M = map(int, input().split()) # N: ๋ ์จ ์, M: ๋ธ๋ฃจ๋ ์ด ์
lesson_list = list(map(int, input().split())) # ๋ ์จ๋ค
right = sum(lesson_list) # ๋ ์จ์ ํ๋์ ๋ ์ฝ๋์ ๋ค ๋ด์ ์ ์์ ๋ ๋ ์ฝ๋์ ํฌ๊ธฐ๋ ๋ ์จ์ ํฉ์ด๋ค
left = max(lesson_list) # ๋ ์ฝ๋๊ฐ ๊ฐ์ง ์ ์๋ ๊ฐ์ฅ ์์ ํฌ๊ธฐ
while left <= right:
# ๋ ์ฝ๋ ํฌ๊ธฐ ์ค๊ฐ๊ฐ ๊ตฌํ๊ธฐ
mid = (left + right) // 2
cnt = add_lesson()
if cnt <= M: # ๋ ์ฝ๋ ์ซ์๊ฐ ๋ชจ์๋ผ๋ฉด ๋ ์ฝ๋ ํฌ๊ธฐ(mid)๋ฅผ ์ค์ธ๋ค.
right = mid - 1
elif cnt > M: # ๋ ์ฝ๋ ์ซ์๊ฐ ๋ ๋ง์์ง๋ฉด ๋ ์ฝ๋ ํฌ๊ธฐ(mid)๋ฅผ ๋๋ฆฐ๋ค
left = mid + 1
# ๋ต์ left ์ ์๋ค. (์ต์ ํฌ๊ธฐ)
print(left)
๐๋ฌธ์ ํ์ธ
์ถ์ฒ: BACKJOON ONLINE JUDGE
๋งํฌ: https://www.acmicpc.net/problem/2343
๋ฌธ์
๊ฐํ ๋ ์์ ์ ๊ธฐํ ๋ ์จ ๋์์์ ๋ธ๋ฃจ๋ ์ด๋ก ๋ง๋ค์ด ํ๋งคํ๋ ค๊ณ ํ๋ค. ๋ธ๋ฃจ๋ ์ด์๋ ์ด N๊ฐ์ ๋ ์จ์ด ๋ค์ด๊ฐ๋๋ฐ, ๋ธ๋ฃจ๋ ์ด๋ฅผ ๋ นํํ ๋, ๋ ์จ์ ์์๊ฐ ๋ฐ๋๋ฉด ์ ๋๋ค. ์์๊ฐ ๋ค๋ฐ๋๋ ๊ฒฝ์ฐ์๋ ๋ ์จ์ ํ๋ฆ์ด ๋๊ฒจ, ํ์๋ค์ด ๋ํผ๋์ ๋น ์ง ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ฆ, i๋ฒ ๋ ์จ๊ณผ j๋ฒ ๋ ์จ์ ๊ฐ์ ๋ธ๋ฃจ๋ ์ด์ ๋ นํํ๋ ค๋ฉด i์ j ์ฌ์ด์ ๋ชจ๋ ๋ ์จ๋ ๊ฐ์ ๋ธ๋ฃจ๋ ์ด์ ๋ นํํด์ผ ํ๋ค.
๊ฐํ ๋ ์ด ๋ธ๋ฃจ๋ ์ด๊ฐ ์ผ๋ง๋ ํ๋ฆด์ง ์์ง ์ ์ ์๊ธฐ ๋๋ฌธ์, ๋ธ๋ฃจ๋ ์ด์ ๊ฐ์๋ฅผ ๊ฐ๊ธ์ ์ค์ด๋ ค๊ณ ํ๋ค. ์ค๋ ๊ณ ๋ฏผ ๋์ ๊ฐํ ๋ M๊ฐ์ ๋ธ๋ฃจ๋ ์ด์ ๋ชจ๋ ๊ธฐํ ๋ ์จ ๋์์์ ๋ นํํ๊ธฐ๋ก ํ๋ค. ์ด๋, ๋ธ๋ฃจ๋ ์ด์ ํฌ๊ธฐ(๋ นํ ๊ฐ๋ฅํ ๊ธธ์ด)๋ฅผ ์ต์๋ก ํ๋ ค๊ณ ํ๋ค. ๋จ, M๊ฐ์ ๋ธ๋ฃจ๋ ์ด๋ ๋ชจ๋ ๊ฐ์ ํฌ๊ธฐ์ด์ด์ผ ํ๋ค.
๊ฐํ ์ ๊ฐ ๋ ์จ์ ๊ธธ์ด๊ฐ ๋ถ ๋จ์(์์ฐ์)๋ก ์ฃผ์ด์ง๋ค. ์ด๋, ๊ฐ๋ฅํ ๋ธ๋ฃจ๋ ์ด์ ํฌ๊ธฐ ์ค ์ต์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ ์จ์ ์ N (1 ≤ N ≤ 100,000)๊ณผ M (1 ≤ M ≤ N)์ด ์ฃผ์ด์ง๋ค. ๋ค์ ์ค์๋ ๊ฐํ ์ ๊ธฐํ ๋ ์จ์ ๊ธธ์ด๊ฐ ๋ ์จ ์์๋๋ก ๋ถ ๋จ์๋ก(์์ฐ์)๋ก ์ฃผ์ด์ง๋ค. ๊ฐ ๋ ์จ์ ๊ธธ์ด๋ 10,000๋ถ์ ๋์ง ์๋๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๊ฐ๋ฅํ ๋ธ๋ฃจ๋ ์ด ํฌ๊ธฐ์ค ์ต์๋ฅผ ์ถ๋ ฅํ๋ค.
ํํธ
๋ ์จ์ ์ด 9๊ฐ์ด๊ณ , ๋ธ๋ฃจ๋ ์ด๋ ์ด 3๊ฐ ๊ฐ์ง๊ณ ์๋ค.
1๋ฒ ๋ธ๋ฃจ๋ ์ด์ 1, 2, 3, 4, 5, 2๋ฒ ๋ธ๋ฃจ๋ ์ด์ 6, 7, 3๋ฒ ๋ธ๋ฃจ๋ ์ด์ 8, 9 ๋ฅผ ๋ฃ์ผ๋ฉด ๊ฐ ๋ธ๋ฃจ๋ ์ด์ ๊ธธ์ด๋ 15, 13, 17์ด ๋๋ค. ๋ธ๋ฃจ๋ ์ด์ ๊ธธ์ด๋ ๋ชจ๋ ๊ฐ์์ผ ํ๊ธฐ ๋๋ฌธ์, ๋ธ๋ฃจ๋ ์ด์ ๊ธธ์ด๋ 17์ด ๋๋ค. 17๋ณด๋ค ๋ ์์ ๊ธธ์ด๋ฅผ ๊ฐ์ง๋ ๋ธ๋ฃจ๋ ์ด๋ฅผ ๋ง๋ค ์ ์๋ค.
'Algorithm Problem > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python] ํ๋ก๊ทธ๋๋จธ์ค - ์ฟ ํค ๊ตฌ์ (0) | 2020.09.10 |
---|---|
[python] ํ๋ก๊ทธ๋๋จธ์ค - ๋์คํฌ ์ปจํธ๋กค๋ฌ (0) | 2020.09.10 |
[python] ๋ฐฑ์ค - 1926. ๊ทธ๋ฆผ (0) | 2020.09.08 |
[python] ๋ฐฑ์ค - 1743. ์์๋ฌผ ํผํ๊ธฐ (0) | 2020.09.07 |
[python] ํ๋ก๊ทธ๋๋จธ์ค - ์ธ๋ฒฝ ์ ๊ฒ(2020 KAKAO BLIND RECRUITMENT) (0) | 2020.09.06 |