olrlobt

[์ž๋ฐ”/๋ฐฑ์ค€ ๊ณจ๋“œ5] #1461 ๋„์„œ๊ด€ ๋ณธ๋ฌธ

Algorithm/๋ฐฑ์ค€

[์ž๋ฐ”/๋ฐฑ์ค€ ๊ณจ๋“œ5] #1461 ๋„์„œ๊ด€

olrlobt 2023. 1. 2. 07:00

๐Ÿ”’ ๊ณจ๋“œ5 - #1461 ๋„์„œ๊ด€

 

๐Ÿ“Œ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ถ”๊ฐ€ ํžŒํŠธ

5 2
1 2 3 4 5

= 13
5 2
-45 -26 -18 -9 -4

= 89
5 3
-45 -26 -18 -9 -4

= 63

 

โœ๏ธ ํ’€์ด๋ฒ•

 

ํ•ด๋‹น ๋ฌธ์ œ๋Š”, ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ์™€ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๊ฐ€ ํ’€์–ด์ง€๋Š” ๊ณผ์ •์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด ๋‹ค์†Œ ์–ด๋ ค์› ๋‹ค.

 

๋‹น์—ฐํžˆ 2๊ฐœ์”ฉ ์ฑ…์„ ๋“ค๊ณ  ๊ฐ„๋‹ค๋ฉด, ๋๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ 2๊ฐœ์”ฉ ๋†“์œผ๋ฉด ๋œ๋‹ค๊ณ  ์ƒ๊ฐ์„ ํ–ˆ๋Š”๋ฐ ๋‹ต์ด ๋„์ถœ๋˜์ง€ ์•Š์•˜๊ณ ,

์ค‘๊ฐ„์— ์ฑ…์„ ๋†“๊ณ  ๊ฐ€๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐ ํ•ด๋ณด๋‹ˆ ๋‹ต์ด ๋„์ถœ๋˜์—ˆ์ง€๋งŒ, ์‹์„ ์„ธ์šฐ๊ธฐ ์–ด๋ ค์› ๋‹ค.

 

๋”ฐ๋ผ์„œ ๋‹ค์‹œ ๋‹ต์ด ๋„์ถœ๋˜๋Š” ๊ณผ์ •์„ ์ƒ๊ฐํ•ด ๋ณด๊ณ  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.

 

 

 

 

๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ๋‹ต์ด ๋„์ถœ๋˜๋Š” ๊ณผ์ •์€ ํ•œ ์นธ์”ฉ ์ „์ง„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

ํ•œ์นธ์”ฉ ์›€์ง์ด๋ฉด์„œ, ํ•ด๋‹น ๋ฐฉํ–ฅ์— ์žˆ๋Š” ๋ชจ๋“  ์ฑ…๋“ค์„ ์˜ฎ๊ธฐ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•˜๋ฉด๋œ๋‹ค.

 

์œ„์˜ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ฅผ ์˜ˆ๋กœ ๋“ค๋ฉด,

5 2
1 2 3 4 5

= 13

 

๊ฐ€๋กœ์ถ•์€ ์ขŒํ‘œ๋ฅผ, ๋„ค๋ชจ๋ฐ•์Šค๋Š” ์ฑ…์„ ์˜๋ฏธํ•œ๋‹ค๋ฉด, ์ฒ˜์Œ์—๋Š” ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์œ„์น˜ํ•  ๊ฒƒ์ด๋‹ค.

 

 

๋ชจ๋“  ์ฑ…์„ 1๋กœ ์˜ฎ๊ธฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฒซ ๊ฑธ์Œ 1์— ์™•๋ณต 2๋ฅผ 2ํšŒ์ฐจ ๋งŒํผ ์˜ฎ๊ธฐ๋ฉด ๋œ๋‹ค.

1 + 2 + 2 = 5

 

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ชจ๋“  ์ฑ…(1์€ ๋„์ฐฉํ–ˆ์œผ๋ฏ€๋กœ ์ œ์™ธํ•œ๋‹ค.)์„ 2๋กœ ์˜ฎ๊ธฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฒซ๊ฑธ์Œ 1์— ์™•๋ณต 2๋ฅผ 1ํšŒ์ฐจ๋งŒํผ ์˜ฎ๊ธฐ๋ฉด ๋œ๋‹ค.

1+ 2 = 3

 

 

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ชจ๋“  ์ฑ…(1๊ณผ 2๋Š” ์ œ์™ธ)์„ 3๋กœ ์˜ฎ๊ธฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฒซ๊ฑธ์Œ 1์— ์™•๋ณต 2๋ฅผ 1ํšŒ์ฐจ๋งŒํผ ์˜ฎ๊ธฐ๋ฉด ๋œ๋‹ค.

1+ 2 = 3

 

 

๋‚˜๋จธ์ง€ 4์™€ 5์˜ ๊ฒฝ์šฐ ํ•œ ๊ฑธ์Œ์”ฉ ์˜ฎ๊ธฐ๋ฉด ๋œ๋‹ค.

1 + 1 = 2

 

๋”ฐ๋ผ์„œ 5 + 3 + 3 + 2 = 13 ์ด๋ผ๋Š” ๊ฐ’์ด ๋„์ถœ๋œ๋‹ค.

 

๋„์ถœ๋˜๋Š” ๊ณผ์ •์€ ์ž…๋ ฅ๋ฐ›์€ M์„ ๊ธฐ์ค€์œผ๋กœ ๋งˆ์ง€๋ง‰์—์„œ M์˜ ์œ„์น˜๊นŒ์ง€๋Š” ์™•๋ณต์„ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

2M์˜ ์œ„์น˜๊นŒ์ง€๋Š” 1๋ฒˆ ์™•๋ณตํ•ด์•ผํ•˜๊ณ ,

3M์˜ ์œ„์น˜๊นŒ์ง€๋Š” 2๋ฒˆ ์™•๋ณต์„ ํ•ด์•ผํ•œ๋‹ค.

 

์ฆ‰, ์œ„์˜ ์˜ˆ์ œ์—์„œ๋Š” 2๊ฐœ์˜ ์ฑ…์„ ๋“ค ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ,

๋งˆ์ง€๋ง‰์—์„œ 2๋ฒˆ์งธ ์œ„์น˜ํ•œ 4์™€ 5๋Š” ์™•๋ณต์„ ํ•  ํ•„์š”๊ฐ€ ์—†๊ณ ,

๋งˆ์ง€๋ง‰์—์„œ 4๋ฒˆ์งธ ์œ„์น˜ํ•œ 2์™€ 3์€ 1๋ฒˆ ์™•๋ณต์„ ํ•ด์•ผํ•œ๋‹ค.

1์˜ ๊ฒฝ์šฐ๋Š” 5๋ฒˆ์งธ ์œ„์น˜ํ–ˆ๊ธฐ์—, 2๋ฒˆ ์™•๋ณต์„ ํ–ˆ๋‹ค.

 

 

๋”ฐ๋ผ์„œ, ์ „์ฒด ๊ธธ์ด์ธ 5๊นŒ์ง€ ์ด๋™ํ•˜๋Š” ํšŸ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ ๋”ํ•ด์ฃผ๊ณ , ์™•๋ณต์œผ๋กœ ์›€์ง์ด๋Š” ํšŸ์ˆ˜๋ฅผ ๋”ํ•ด์ฃผ๋ฉด ๊ฐ’์ด ๋„์ถœ๋œ๋‹ค.

5 + (2+2)+(2)+(2) = 13

 

 

 

์œ„์˜ ์˜ˆ์ œ์—์„œ๋Š” ์ขŒํ‘œ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๊ฐ€ 1์ด๊ธฐ๋•Œ๋ฌธ์— ์‹์„ ๋„์ถœํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๊ณ , ์Œ์ˆ˜ ์ขŒํ‘œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์Œ์ˆ˜ ์ขŒํ‘œ์˜ ๊ฒฝ์šฐ๋„ ์ƒ๊ฐํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

 

 

 

 

 

ํ’€์ด๊ณผ์ • :

    1. ์Œ์ˆ˜ ์ขŒํ‘œ์™€ ์–‘์ˆ˜ ์ขŒํ‘œ์˜ ์ฑ…๋“ค์„ ๋ถ„๋ฅ˜ํ•œ๋‹ค.

    2. ๊ฐ€์žฅ ๋จผ ์ขŒํ‘œ๋ถ€ํ„ฐ i ๋ฒˆ์งธ๊นŒ์ง€ ์œ„์น˜ํ•œ ์ฑ…๋“ค์€ i / M ๋งŒํผ ์™•๋ณตํ•ด์•ผํ•œ๋‹ค.

    3.  ์Œ์ˆ˜ ์ขŒํ‘œ์™€ ์–‘์ˆ˜ ์ขŒํ‘œ์ค‘ ์ž‘์€ ๊ฐ’์„ ๋จผ์ € ์™•๋ณตํ•œ๋‹ค.

 

 

 

 

 

 

 

๐Ÿ—๏ธ ํ’€์ด

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class baekjoon1461 {

    static int M;
    static List<Integer> leftPosition = new ArrayList<>();
    static List<Integer> rightPosition = new ArrayList<>();

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt();
        M = sc.nextInt();

        for (int testCase = 0; testCase < N; testCase++) {
            int position = sc.nextInt();

            if (position < 0) {
                leftPosition.add(Math.abs(position));
            } else {
                rightPosition.add(position);
            }

        }
        leftPosition.add(0);
        rightPosition.add(0);

        solve();
    }

    public static void solve() {

        Collections.sort(leftPosition, Collections.reverseOrder());
        Collections.sort(rightPosition, Collections.reverseOrder());

        int closePosition = leftPosition.get(0);

        if (leftPosition.get(0) > rightPosition.get(0)) {
            closePosition = rightPosition.get(0);
        }

        int sum = closePosition + calMinStep(leftPosition) + calMinStep(rightPosition);
        System.out.println(sum);
    }

    private static int calMinStep(List<Integer> position) {
        int step = position.get(0);

        for (int i = M; i < position.size() - 1; i++) {
            int returnNumber = i / M;
            step += (position.get(i) - position.get(i + 1)) * 2 * returnNumber;
        }
        return step;
    }


}
Comments