10000COW 2023. 2. 20. 11:16
728x90

2212 μ„Όμ„œ 

문제

ν•œκ΅­λ„λ‘œκ³΅μ‚¬λŠ” κ³ μ†λ„λ‘œμ˜ μœ λΉ„μΏΌν„°μŠ€ν™”λ₯Ό μœ„ν•΄ κ³ μ†λ„λ‘œ μœ„μ— N개의 μ„Όμ„œλ₯Ό μ„€μΉ˜ν•˜μ˜€λ‹€. λ¬Έμ œλŠ” 이 μ„Όμ„œλ“€μ΄ μˆ˜μ§‘ν•œ μžλ£Œλ“€μ„ λͺ¨μœΌκ³  뢄석할 λͺ‡ 개의 집쀑ꡭ을 μ„Έμš°λŠ” 일인데, μ˜ˆμ‚°μƒμ˜ 문제둜, κ³ μ†λ„λ‘œ μœ„μ— μ΅œλŒ€ K개의 집쀑ꡭ을 μ„ΈμšΈ 수 μžˆλ‹€κ³  ν•œλ‹€.

각 집쀑ꡭ은 μ„Όμ„œμ˜ μˆ˜μ‹  κ°€λŠ₯ μ˜μ—­μ„ μ‘°μ ˆν•  수 μžˆλ‹€. μ§‘μ€‘κ΅­μ˜ μˆ˜μ‹  κ°€λŠ₯ μ˜μ—­μ€ κ³ μ†λ„λ‘œ μƒμ—μ„œ μ—°κ²°λœ κ΅¬κ°„μœΌλ‘œ λ‚˜νƒ€λ‚˜κ²Œ λœλ‹€. N개의 μ„Όμ„œκ°€ 적어도 ν•˜λ‚˜μ˜ μ§‘μ€‘κ΅­κ³ΌλŠ” 톡신이 κ°€λŠ₯ν•΄μ•Ό ν•˜λ©°, μ§‘μ€‘κ΅­μ˜ μœ μ§€λΉ„ 문제둜 인해 각 μ§‘μ€‘κ΅­μ˜ μˆ˜μ‹  κ°€λŠ₯ μ˜μ—­μ˜ 길이의 합을 μ΅œμ†Œν™”ν•΄μ•Ό ν•œλ‹€.

편의λ₯Ό μœ„ν•΄ κ³ μ†λ„λ‘œλŠ” ν‰λ©΄μƒμ˜ 직선이라고 κ°€μ •ν•˜κ³ , μ„Όμ„œλ“€μ€ 이 직선 μœ„μ˜ ν•œ 기점인 μ›μ μœΌλ‘œλΆ€ν„°μ˜ μ •μˆ˜ 거리의 μœ„μΉ˜μ— 놓여 μžˆλ‹€κ³  ν•˜μž. λ”°λΌμ„œ, 각 μ„Όμ„œμ˜ μ’Œν‘œλŠ” μ •μˆ˜ ν•˜λ‚˜λ‘œ ν‘œν˜„λœλ‹€. 이 μƒν™©μ—μ„œ 각 μ§‘μ€‘κ΅­μ˜ μˆ˜μ‹  κ°€λŠ₯μ˜μ—­μ˜ 거리의 ν•©μ˜ μ΅œμ†Ÿκ°’μ„ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. 단, μ§‘μ€‘κ΅­μ˜ μˆ˜μ‹  κ°€λŠ₯μ˜μ—­μ˜ κΈΈμ΄λŠ” 0 이상이며 λͺ¨λ“  μ„Όμ„œμ˜ μ’Œν‘œκ°€ λ‹€λ₯Ό ν•„μš”λŠ” μ—†λ‹€.

μž…λ ₯

첫째 쀄에 μ„Όμ„œμ˜ 개수 N(1 ≤ N ≤ 10,000), λ‘˜μ§Έ 쀄에 μ§‘μ€‘κ΅­μ˜ 개수 K(1 ≤ K ≤ 1000)κ°€ 주어진닀. μ…‹μ§Έ μ€„μ—λŠ” N개의 μ„Όμ„œμ˜ μ’Œν‘œκ°€ ν•œ 개의 μ •μˆ˜λ‘œ N개 주어진닀. 각 μ’Œν‘œ μ‚¬μ΄μ—λŠ” 빈 칸이 ν•˜λ‚˜ μžˆμœΌλ©°, μ’Œν‘œμ˜ μ ˆλŒ“κ°’μ€ 1,000,000 μ΄ν•˜μ΄λ‹€.

좜λ ₯

첫째 쀄에 λ¬Έμ œμ—μ„œ μ„€λͺ…ν•œ μ΅œλŒ€ K개의 μ§‘μ€‘κ΅­μ˜ μˆ˜μ‹  κ°€λŠ₯ μ˜μ—­μ˜ 길이의 ν•©μ˜ μ΅œμ†Ÿκ°’μ„ 좜λ ₯ν•œλ‹€.

예제 μž…λ ₯ 1 λ³΅μ‚¬

6
2
1 6 9 3 6 7

예제 좜λ ₯ 1 λ³΅μ‚¬

5

예제 μž…λ ₯ 2 λ³΅μ‚¬

10
5
20 3 14 6 7 8 18 10 12 15

풀이

 

주어진 쑰건

μ„Όμ„œμ˜ 개수(n)

μ§‘μ€‘κ΅­μ˜ 개수(k)

집쀑ꡭ을 k개λ₯Ό μ„Έμš°λ©΄, (k - 1) 개의 μ˜μ—­μœΌλ‘œ ꡬ뢄이 λœλ‹€. 이 μ˜μ—­λ“€μ΄ μˆ˜μ‹  κ°€λŠ₯ μ˜μ—­μ΄ λœλ‹€. (κ³ μ†λ„λ‘œ μƒμ—μ„œ μ—°κ²°λœ κ΅¬κ°„μœΌλ‘œ λ‚˜νƒ€λ‚˜λŠ” ꡬ간.)

 

첫번째 예제λ₯Ό 그림으둜 ν‘œν˜„ν•΄λ³΄λ©΄μ„œ μ–΄λ–»κ²Œ 풀어야할지 μƒκ°ν•΄λ³΄μž.

μ„Όμ„œλ“€μ˜ μœ„μΉ˜:[ 1, 3, 6, 6, 7, 9 ]

각 μ„Όμ„œλ“€κ°„μ˜ 거리λ₯Ό ꡬ해본닀.

μ„Όμ„œλ“€μ˜ 거리: [2, 3, 0, 1, 2]

 

μš°λ¦¬λŠ” 2개의 μˆ˜μ‹  κ°€λŠ₯ μ˜μ—­μœΌλ‘œ λ‚˜λˆ„μ–΄μ•Ό ν•œλ‹€.

그런데, μˆ˜μ‹  κ°€λŠ₯ μ˜μ—­μ˜ 길이의 합이 μ΅œμ†Œκ°€ λ˜λ„λ‘ν•˜λ €λ©΄, μˆ˜μ‹  κ°€λŠ₯ μ˜μ—­μ„ λ‚˜λˆ„λŠ”κ²Œ μ’‹μ„κΉŒ?

κ·Έλ ‡λ‹€. μ„Όμ„œ κ°„μ˜ 거리 쀑 κ°€μž₯ 거리가 λ¨Ό 3을 κ²½κ³„λ‘œ 두 μ˜μ—­μœΌλ‘œ λ‚˜λˆ„μ–΄μ•Ό ν•œλ‹€. (1,3), (6,6,7,9)

κ·Έλ ‡λ‹€λ©΄ μˆ˜μ‹  κ°€λŠ₯ μ˜μ—­ 길이의 합은, 2 + (0 + 1 + 2)κ°€ 될 것이닀.

 

즉, (집쀑ꡭ k개둜 μˆ˜μ‹  κ°€λŠ₯ μ˜μ—­μ€ k개이고, k개의 μ˜μ—­μœΌλ‘œ κ΅¬λΆ„λ˜κΈ° μœ„ν•΄μ„œλŠ” k-1 개의 경계가 μƒκΈ°λ―€λ‘œ) μ„Όμ„œλ“€ κ°„μ˜ 거리 쀑 κ°€μž₯ λ¨Ό 거리(집쀑ꡭ κ°„μ˜ 경계가 λ˜μ–΄ κ³ λ €ν•˜μ§€ μ•Šμ•„λ„ λ˜λŠ” 거리. μ—¬κΈ°μ„œλŠ” 3) k-1개λ₯Ό μ œμ™Έν•œ 합이 μˆ˜μ‹  κ°€λŠ₯ μ˜μ—­μ˜ μ΅œμ†Œ 길이 합이 λœλ‹€.

예제 1

 

예제 2도 같은 λ°©μ‹μœΌλ‘œ 풀이할 수 μžˆκ² λ‹€.

이제 풀이 방법을 μ•Œμ•˜μœΌλ‹ˆ, 우리의 μ•Œκ³ λ¦¬μ¦˜μ„ μΌλ°˜ν™” μ‹œμΌœλ³΄λ©΄μ„œ ν’€μ΄ν•΄λ³΄μž.
1️⃣ μ„Όμ„œλ“€μ„ μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•œλ‹€. (μ„Όμ„œλ“€μ€ μ›μ μœΌλ‘œλΆ€ν„° μ˜€λ¦„μ°¨μˆœμœΌλ‘œ 배치될 것이기 λ•Œλ¬Έ)
[3, 6, 7, 8, 10, 12,14, 15, 18, 20]
 
2️⃣ μ„Όμ„œλ“€ κ°„μ˜ 거리λ₯Ό κ΅¬ν•˜κ³ , μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•œλ‹€. (κ°€μž₯ κΈ΄ 거리 k-1개λ₯Ό μ œμ™Έν•  것이기 λ•Œλ¬Έ)
[1, 1, 1, 2, 2 ,2 ,2 ,3, 3]
3️⃣ μ„Όμ„œλ“€ κ°„μ˜ 거리 쀑 κ°€μž₯ λ¨Ό 거리 k-1개λ₯Ό μ œμ™Έν•œ 합을 κ΅¬ν•œλ‹€. λ‹΅ 좜λ ₯.
μ„Όμ„œλ“€ κ°„μ˜ 거리 쀑 κ°€μž₯ λ¨Ό 거리 4개λ₯Ό μ œμ™Έν•œ 합을 κ΅¬ν•œλ‹€.

1 + 1 + 1+ 2+ 2+ 2 = 7

예제 2

 

μ½”λ“œ

N = int(input())
K = int(input())

sensors = list(map(int, input().split(' ')))
sensors.sort()

dist = []
for idx in range(0, N-1):
dist.append(sensors[idx+1] - sensors[idx])
dist.sort()

min_sum = 0
for idx in range(0, N-K):
min_sum += dist[idx]

print(min_sum)
 
 
 
728x90