๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜

[BOJ/13164] ํ–‰๋ณต ์œ ์น˜์› (๊ทธ๋ฆฌ๋””)

by mingzoo 2023. 10. 11.

# 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:]))

 

๊ธฐ์ค€์ ์„ ์ƒ๊ฐํ•˜๋Š” ๋งˆ์ธ๋“œ๋ฅผ ๊ฐ–์ž

728x90