We will find a way, we always have.

-interstellar

Problem Solving/λ°±μ€€

[λ°±μ€€] 13164번: 행볡 μœ μΉ˜μ› - μžλ°”

Redddy 2022. 10. 9. 00:09

πŸ”ˆ 문제

행볡 μœ μΉ˜μ› 원μž₯인 νƒœμ–‘μ΄λŠ” μ–΄λŠ λ‚  Nλͺ…μ˜ 원생듀을 ν‚€ μˆœμ„œλŒ€λ‘œ 일렬둜 쀄 μ„Έμš°κ³ , 총 K개의 쑰둜 λ‚˜λˆ„λ €κ³  ν•œλ‹€. 각 μ‘°μ—λŠ” 원생이 적어도 ν•œ λͺ… μžˆμ–΄μ•Ό ν•˜λ©°, 같은 쑰에 μ†ν•œ 원생듀은 μ„œλ‘œ 인접해 μžˆμ–΄μ•Ό ν•œλ‹€. μ‘°λ³„λ‘œ μΈμ›μˆ˜κ°€ 같을 ν•„μš”λŠ” μ—†λ‹€.
μ΄λ ‡κ²Œ λ‚˜λ‰˜μ–΄μ§„ 쑰듀은 각자 단체 ν‹°μ…”μΈ λ₯Ό λ§žμΆ”λ €κ³  ν•œλ‹€. μ‘°λ§ˆλ‹€ ν‹°μ…”μΈ λ₯Ό λ§žμΆ”λŠ” λΉ„μš©μ€ μ‘°μ—μ„œ κ°€μž₯ ν‚€κ°€ 큰 원생과 κ°€μž₯ ν‚€κ°€ μž‘μ€ μ›μƒμ˜ ν‚€ 차이만큼 λ“ λ‹€. μ΅œλŒ€ν•œ λΉ„μš©μ„ 아끼고 μ‹Άμ–΄ ν•˜λŠ” νƒœμ–‘μ΄λŠ” K개의 쑰에 λŒ€ν•΄ ν‹°μ…”μΈ  λ§Œλ“œλŠ” λΉ„μš©μ˜ 합을 μ΅œμ†Œλ‘œ ν•˜κ³  μ‹Άμ–΄ν•œλ‹€. νƒœμ–‘μ΄λ₯Ό 도와 μ΅œμ†Œμ˜ λΉ„μš©μ„ κ΅¬ν•˜μž.

 

πŸ“μž…λ ₯

μž…λ ₯의 첫 μ€„μ—λŠ” μœ μΉ˜μ›μ— μžˆλŠ” μ›μƒμ˜ 수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μžμ—°μˆ˜ N(1 ≤ N ≤ 300,000)κ³Ό λ‚˜λˆ„λ €κ³  ν•˜λŠ” 쑰의 개수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μžμ—°μˆ˜ K(1 ≤ K ≤ N)κ°€ 곡백으둜 κ΅¬λΆ„λ˜μ–΄ 주어진닀. λ‹€μŒ μ€„μ—λŠ” μ›μƒλ“€μ˜ ν‚€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” N개의 μžμ—°μˆ˜κ°€ 곡백으둜 κ΅¬λΆ„λ˜μ–΄ 쀄 μ„œ μžˆλŠ” μˆœμ„œλŒ€λ‘œ 주어진닀. νƒœμ–‘μ΄λŠ” 원생듀을 ν‚€ μˆœμ„œλŒ€λ‘œ 쀄 μ„Έμ› μœΌλ―€λ‘œ, μ™Όμͺ½μ— μžˆλŠ” 원생이 였λ₯Έμͺ½μ— μžˆλŠ” 원생보닀 크지 μ•Šλ‹€. μ›μƒμ˜ ν‚€λŠ” $ 10^9 $λ₯Ό λ„˜μ§€ μ•ŠλŠ” μžμ—°μˆ˜μ΄λ‹€.

 

πŸ“‘μΆœλ ₯

ν‹°μ…”μΈ  λ§Œλ“œλŠ” λΉ„μš©μ΄ μ΅œμ†Œκ°€ λ˜λ„λ‘ K개의 쑰둜 λ‚˜λˆ„μ—ˆμ„ λ•Œ, ν‹°μ…”μΈ  λ§Œλ“œλŠ” λΉ„μš©μ„ 좜λ ₯ν•œλ‹€.

 

πŸ“š λ¬Έμ œ ν’€μ΄

 

k개둜 μͺΌκ°°μ„ λ•Œ ν•œ 묢음 쀑 μ΅œμ†Œκ°’κ³Ό μ΅œλŒ€κ°’μ˜ 차이λ₯Ό μ΅œμ†Œλ‘œ λ§Œλ“œλŠ” λ¬Έμ œμ˜€λ‹€.

배열을 λ§Œλ“€μ–΄μ„œ μ •λ ¬λœ μ›μƒλ“€μ˜ μ΄μ›ƒν•œ μ›μƒμ˜ 킀차이λ₯Ό λ‹΄λŠ”λ‹€. 총 nλͺ…μ˜ 원생이 μžˆμœΌλ‹ˆ λ°°μ—΄μ˜ ν¬κΈ°λŠ” n-1이 λœλ‹€.

(2번-1번, 3번-2번, 4번-3번 λΌμžŒλ”—)

그리고 이 차이λ₯Ό 담은 배열을 λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬ν•œλ‹€. κ·Έ λ‹€μŒ κ·Έ λ°°μ—΄μ˜ kλ²ˆμ§ΈλΆ€ν„° n-1κΉŒμ§€ λ”ν•œ 값이 κ΅¬ν•˜κ³ μž ν•˜λŠ” 값이닀.

 

μ‰½κ²Œ μƒκ°ν•˜λ©΄ νŠΉμΆœλ‚˜κ²Œ 큰 μ›μƒμ΄λ‚˜, νŠΉμΆœλ‚˜κ²Œ μž‘μ€ 원생은 νŒ€μœΌλ‘œ 묢지 μ•Šκ³  κ·Έλƒ₯ 혼자 λƒ…λ‘λŠ” 것이닀. λ§Œμ•½ 이 μΉœκ΅¬λ“€μ΄ νŒ€μ— λ“€μ–΄κ°„λ‹€λ©΄ 차이λ₯Ό 크게 λ§Œλ“€κ²ƒμ΄κΈ° λ•Œλ¬Έμ΄λ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 그리디 적으둜 μž‘μ€ 차이λ₯Ό κ°–λŠ” 애듀을 λ¬Άμ–΄ μ„€λ ˆλŠ” 킀차이λ₯Ό μ΅œμ†Œν™” ν•œκ²ƒμ΄λ‹€.

 

πŸ’» μ½”λ“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.io.*;
import java.util.*;
 
public class Cos{
    public static void main(String[] args)throws Exception{
        // Fast input
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer s = new StringTokenizer(br.readLine().trim());
        int n = Integer.parseInt(s.nextToken());
        int k = Integer.parseInt(s.nextToken());
 
        int[] nums = new int[n];
        int res = 0;
        
        // for difference arrays
        Integer[] diff = new Integer[n-1];
        s = new StringTokenizer(br.readLine().trim());
        for (int i=0;i<n;i++){
            nums[i] = Integer.parseInt(s.nextToken());
        }
        for (int j=0;j<n-1;j++){
            diff[j] = nums[j+1]-nums[j];
        }
        // sort
        Arrays.sort(diff, Collections.reverseOrder());
 
        for (int i=k-1;i<diff.length;i++){
            res += diff[i];
        }
        System.out.println(res);
    }
}
cs

 

🍭 μ‹œν–‰μ°©μ˜€

파이썬과 μžλ°”

사싀 이 λ¬Έμ œλŠ” 파이썬으둜 λ¨Όμ € ν’€μ—ˆκ³ , κ·Έ λ’€ μžλ°”λ‘œλ„ μ†ŒμŠ€μ½”λ“œλ₯Ό μ§œλ³΄μ•˜λ‹€.

1784msμ—μ„œ 960ms둜 λ‹¨μΆ•λœ μ΄μœ λŠ” λΉ λ₯Έ μž…μΆœλ ₯을 μ‚¬μš©ν–ˆκΈ° λ•Œλ¬Έμ΄λ‹€.

 

πŸ”— 문제링크 ν–‰λ³΅μœ μΉ˜μ›

 

13164번: 행볡 μœ μΉ˜μ›

행볡 μœ μΉ˜μ› 원μž₯인 νƒœμ–‘μ΄λŠ” μ–΄λŠ λ‚  Nλͺ…μ˜ 원생듀을 ν‚€ μˆœμ„œλŒ€λ‘œ 일렬둜 쀄 μ„Έμš°κ³ , 총 K개의 쑰둜 λ‚˜λˆ„λ €κ³  ν•œλ‹€. 각 μ‘°μ—λŠ” 원생이 적어도 ν•œ λͺ… μžˆμ–΄μ•Ό ν•˜λ©°, 같은 쑰에 μ†ν•œ 원생듀은 μ„œλ‘œ

www.acmicpc.net