# 13164 ํ๋ณต ์ ์น์ ๋ฌธ์
ํ๋ณต ์ ์น์ ์์ฅ์ธ ํ์์ด๋ ์ด๋ ๋ N๋ช ์ ์์๋ค์ ํค ์์๋๋ก ์ผ๋ ฌ๋ก ์ค ์ธ์ฐ๊ณ , ์ด K๊ฐ์ ์กฐ๋ก ๋๋๋ ค๊ณ ํ๋ค. ๊ฐ ์กฐ์๋ ์์์ด ์ ์ด๋ ํ ๋ช ์์ด์ผ ํ๋ฉฐ, ๊ฐ์ ์กฐ์ ์ํ ์์๋ค์ ์๋ก ์ธ์ ํด ์์ด์ผ ํ๋ค. ์กฐ๋ณ๋ก ์ธ์์๊ฐ ๊ฐ์ ํ์๋ ์๋ค.
์ด๋ ๊ฒ ๋๋์ด์ง ์กฐ๋ค์ ๊ฐ์ ๋จ์ฒด ํฐ์ ์ธ ๋ฅผ ๋ง์ถ๋ ค๊ณ ํ๋ค. ์กฐ๋ง๋ค ํฐ์ ์ธ ๋ฅผ ๋ง์ถ๋ ๋น์ฉ์ ์กฐ์์ ๊ฐ์ฅ ํค๊ฐ ํฐ ์์๊ณผ ๊ฐ์ฅ ํค๊ฐ ์์ ์์์ ํค ์ฐจ์ด๋งํผ ๋ ๋ค. ์ต๋ํ ๋น์ฉ์ ์๋ผ๊ณ ์ถ์ด ํ๋ ํ์์ด๋ K๊ฐ์ ์กฐ์ ๋ํด ํฐ์ ์ธ ๋ง๋๋ ๋น์ฉ์ ํฉ์ ์ต์๋ก ํ๊ณ ์ถ์ดํ๋ค. ํ์์ด๋ฅผ ๋์ ์ต์์ ๋น์ฉ์ ๊ตฌํ์.
๋ฌธ์ ๋ฅผ ํ๊ฒ ๋ ๋ด ํ๋ฆ์ ์ค๋ช ํด๋ณด๊ฒ ๋ค.
๋ฌธ์ ๋ฅผ ๋จผ์ ๋ดค์๋ ์ ์ผ ๋จผ์ ์ ์๋ ๊ฒ์
์ ์ฒด N๋ช / ํค ์์ => ์ค๋ฆ์ฐจ์ / k๊ฐ ์กฐ / ๊ฐ๊ฒฉ : ์ ์ผํฐ - ์ ์ผ ์์
์ด ํค์๋๋ค๋ก ์์ํ๋ค.
์ ์ผ ์ฒ์ ๋ฌธ์ ๋ฅผ ๋ณผ ๋๋ ์์ ํ์ / ๋ฐฑํธ๋ํน ์ด๋ ๊ฒ ๋๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๊ฐ๋ฌ๋ค.
์ ์ผ ์ฒซ ๊ด๋ฌธ์ N๋ช ์ ์ด๋ป๊ฒ k๊ฐ๋ก ๋๋์ง์ ๋ํ ๋ฐฉ๋ฒ์ด์๋ค.
์ฌ๊ธฐ์ ์๊ฐ๋ ๊ฑด ๋ฐฑํธ๋ํน์ด์๋ค.
1-n๊น์ง์ ์ซ์๋ฅผ k๋ฒ ๋ฝ์์ ํฉ์ด n์ด ๋๊ฒ๋ ๋ง๋๋ ๋ก์ง์ ์์ฑํ์๋ค.
๊ทธ ํ, ๋ฐฑํธ๋ํน์ผ๋ก 5๋ฅผ k๊ฐ๋ก ๋๋ ์ ์๋ ์กฐํฉ์ ์ฐพ๊ณ , ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ ํ ์์๋ค์ ๋๋๋ ๋ฐฉ๋ฒ!์ผ๋ก ๊ตฌํํ๋ ค๊ณ ๋ง์๋จน์๋ค.
๋๋ฒ์งธ๋ ์กฐํฉ์ผ๋ก ๋๋ ์์๋ค์ ๊ฐ๊ฒฉ์ ์ด๋ป๊ฒ ์ธก์ ํ ๊ฒ์ด๋ ์๋ค.
๊ทธ ์กฐํฉ์ผ๋ก ๋์๊ฐ๋ฉด์ ๊ฐ๊ฒฉ์ ์ธก์ ํด์ ๊ฒฐ๊ณผ์ ์ผ๋ก ์ต์๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ์ฑํ!
๋๊ฐ์ง ์๊ฐ์ ๋ง์น ๋๋ ์๋์ ๊ฐ์ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
n, k = tuple(map(int, input().split()))
arr = []
cnt = 0
kids = sorted(list(map(int, input().split())))
ans = max(kids)
def choose_number(curr_num):
global cnt, ans
if (curr_num == k and cnt == n):
temp = 0
temp_ans = 0
for elem in arr:
temp_ans += kids[elem+temp-1] - kids[temp]
temp += elem
ans = min(ans, temp_ans)
for i in range(1, n):
if (cnt+i > n):
return
arr.append(i)
cnt += i
choose_number(curr_num+1)
cnt -= i
arr.pop()
choose_number(0)
print(ans)
๊ทธ ๊ฒฐ๊ณผ..
๋ฐํ์์๋ฌ ๋ฑ์ฅ...
๋ ๋ก๋ฆฌ๋ก
์ฌ๊ธฐ์๋ถํฐ ๋ญ๊ฐ ํฌ๊ฒ ์๋ชป๋จ์ ๊ฐ์ง..
์๋ชป๋ผ๋ ํ์ฐธ ์๋ชป๋๋ค.
์ผ๋จ ์์ด๋์ด๊ฐ ์ด๋์ ๋ ํ์ํ๋ค.
k๊ฐ์ ์กฐ๋ก ๋๋๊ธฐ ์ํด์๋ N์ k-1๊ฐ์ ๊ธฐ์ค์ผ๋ก ์๋ผ์ผํ๋ค.
๊ทธ ๊ธฐ์ค์ ์์์๋ ์์์ ์ฐจ์ด์ด๋ค.
์์ฐจ์ด๊ฐ ํฐ ๊ธฐ์ค์ผ๋ก ๋๋ ์ผ ๊ทธ ๊ฐ์ด ๊ฐ๊ฒฉ์ผ๋ก ์ธก์ ๋์ง ์์๊ฑฐ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ํฐ ์ฐจ์ด๋ฅผ ๊ฐ์ง๊ณ ์๋ k-1๊ฐ๋ฅผ
์๋ฅผ ๋ค์ด,
n=7 k=3
1 3 4 8 11 15 20 ์ด๋ผ๊ณ ํด๋ณด์
>2 1 4 3 4 5
์ด ์ฐจ์ด๋ฅผ ์ค๋ฆ์ฐจ์ ํ๋ฉด => 1 2 3 4 4 5์ด๋ค.
1 2 3 4 /4/ 5 -> 4์ 5๊ฐ ๊ธฐ์ค์ผ๋ก ์กฐ๊ฐ ๋๋์ด์ ธ์ผ ๋น์ฉ์ ํฉ์ด ์ต์๊ฐ ๋๋ค.
์ฌ๊ธฐ์ ๋์ ์์๋๋ก k-1๊ฐ๋ฅผ ์ ๊ฑฐํ ํ์ ํฉ์ด ๋ต์ด๋ค.
์ ๋ก์ง์ ๋ฐ์ํ ์ฝ๋๊ฐ ์๋์ ์ฝ๋์ด๋ค.
import sys
input = sys.stdin.readline
n, k = map(int, input().split())
kids = list(map(int, input().split()))
ans = []
for i in range(1, n):
ans.append(kids[i] - kids[i-1])
ans.sort(reverse=True)
print(sum(ans[k-1:]))
๊ธฐ์ค์ ์ ์๊ฐํ๋ ๋ง์ธ๋๋ฅผ ๊ฐ์
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฝ๋ํธ๋ฆฌ ์ฑ๋ฆฐ์ง] 7์ฃผ์ฐจ (10/17-10/23), ๋ฐฑํธ๋ํน (0) | 2023.10.23 |
---|---|
[์ฝ๋ํธ๋ฆฌ ์ฑ๋ฆฐ์ง] 6์ฃผ์ฐจ (10/11-10/16), BFS (0) | 2023.10.13 |
[์ฝ๋ํธ๋ฆฌ ์ฑ๋ฆฐ์ง] 5์ฃผ์ฐจ (10/4-10/9), DFS (0) | 2023.10.09 |
[์ฝ๋ํธ๋ฆฌ ์ฑ๋ฆฐ์ง] 4์ฃผ์ฐจ (9/27-10/2), ๋ฐฑํธ๋ํน (0) | 2023.09.30 |
[์ฝ๋ํธ๋ฆฌ ์ฑ๋ฆฐ์ง] 3์ฃผ์ฐจ (9/20-9/25), ๋ฐฑํธ๋ํน (0) | 2023.09.23 |