๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ’ป Computer Science/- Data Structure, Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜ PS] ๋ฐฑ์ค€ 9440๋ฒˆ ์ˆซ์ž ๋”ํ•˜๊ธฐ ์ž๋ฐ” ๋ฌธ์ œํ’€์ด

by Wonit 2021. 3. 6.

๋ฌธ์ œ

ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ๋ฐฑ์ค€์˜ 9440๋ฒˆ ์ˆซ์ž ๋”ํ•˜๊ธฐ ์˜ ์ ‘๊ทผ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ ๊ธ€ ์ž…๋‹ˆ๋‹ค.
์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

9440๋ฒˆ: ์ˆซ์ž ๋”ํ•˜๊ธฐ

๊ฐ•๋ฏผ์ด๊ฐ€ ์ดˆ๋“ฑํ•™๊ต 3ํ•™๋…„์ผ ๋•Œ, ๋‹ด์ž„์„ ์ƒ๋‹˜์ด ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๋ƒˆ์—ˆ๋‹ค. ์ˆซ์ž 1, 2, 7, 8, 9 ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋งŒ๋“  ๋‘ ์ˆซ์ž๋ฅผ ๋”ํ–ˆ์„ ๋•Œ, ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? ๊ฐ•๋ฏผ์ด๋Š” ์ด ๋ฌธ์ œ์˜ ๋‹ต์ด 2

www.acmicpc.net

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋จผ์ € ์ƒ๊ฐํ•ด๋ณด์ž.

๋ฌธ์ œ ์ ‘๊ทผ

์ด๋ฒˆ ๋ฌธ์ œ๋Š” ์ •๋ ฌ๊ณผ ๊ทธ๋ฆฌ๋””๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

๋ฌธ์ œ์—์„œ ํ•ต์‹ฌ์€

์ˆซ์ž๋ฅผ ์ •๋ ฌํ•˜๊ณ  0 ~ ์ˆซ์ž ๋ฐฐ์—ด ๊ธธ์ด๋งŒํผ ๋ฐ˜๋ณตํ•˜๋ฉฐ ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ์ˆ˜์— ๋งˆ์ง€๋ง‰ ์ž๋ฆฌ์— ์ถ”๊ฐ€ ํ•ด์ฃผ๋Š” ๊ฒƒ

์ด๊ฒƒ์ด ํ•ต์‹ฌ์ด๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด 1 2 7 8 9 ๋ผ๋Š” ์ˆ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ด๋ณด์ž.

 

๊ทธ๋Ÿผ ์œ„์˜ ํ•ต์‹ฌ๋Œ€๋กœ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•์‹์ด ๋  ๊ฒƒ์ด๋‹ค.

arr = 1, 2, 7, 8, 9;// ์ •๋ ฌ๋œ ์ƒํƒœ

// ์ฒซ ๋‹จ๊ณ„
num1 = 1
num2 = 2

// ๋‘ ๋ฒˆ์จฐ
num1 = 1, 7
num2 = 2, 8

// ์„ธ ๋ฒˆ์งธ
num1 = 1, 7, 9
num2 = 2, 8;

์ด๋Ÿฐ์‹์œผ๋กœ ํ•ด์„œ ์ตœ์ข…์ ์œผ๋กœ num1 + num2 ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ์ตœ์†Ÿ๊ฐ’์ด ๋‚˜์˜จ๋‹ค.

์˜ค๋‹ต ํ›„๋ณด

ํ•˜์ง€๋งŒ ์ด๋“ค ์‚ฌ์ด์— 0์ด ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž.

 

0์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ •๋ ฌ์„ ํ•œ๋‹ค๋ฉด arr = 0 1 2 3 4 0 1 2 3; ์—์„œ arr = 0 0 1 1 2 2 3 3 4; ๊ฐ€ ๋œ๋‹ค.

 

์ด๋Œ€๋กœ ์ •๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค๋ฉด 0์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ˆ˜๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ๋˜๊ณ , ๊ทธ๋Ÿฌ๋ฉด AC๋ฅผ ๋ฐ›์„ ์ˆ˜ ์—†๋‹ค.

 

์ด๋ ‡๊ฒŒ 0์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” 0์„ ์ฒ˜์Œ์œผ๋กœ ๋“ฑ์žฅํ•˜๋Š” ์ˆ˜ ๋’ค๋กœ ์ˆจ๊ฒจ์ค˜์•ผ ํ•œ๋‹ค.

 

arr = 0 0 1 1 2 2 3 3 4; ์—์„œ arr = 1 1 0 0 2 2 3 3 4;

์ด๋Ÿฐ ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ •๋‹ต์ด ๋œ๋‹ค.

๋‚˜๋Š” ํ•ด๋‹น ์—ฐ์‚ฐ์„ ์œ„ํ•ด์„œ 0์ด ๋“ฑ์žฅํ•œ ํšŸ์ˆ˜์—์„œ + 2๋งŒํผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ shift ์—ฐ์‚ฐ ์„ ํ•˜์˜€๋‹ค.


๋งŒ์•ฝ ์‰ฌํ”„ํŠธ ์—ฐ์‚ฐ์„ ์•Œ์ง€ ๋ชปํ•œ๋‹ค๋ฉด ์ž๋ฐ”๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฐ์—ด shift ๊ตฌํ˜„ํ•˜๊ธฐ ์„ ์ฐธ๊ณ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

 

์ •๋‹ต ์ฝ”๋“œ

public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        while(true) {
            String[] ns = br.readLine().split(" ");
            if(ns.length == 1 && ns[0].equals("0")) break;

            int n = Integer.parseInt(ns[0]);

            int[] arr = new int[n];

            int zeroCount = 0;
            for(int i = 0; i < n; i++) {
                arr[i] = Integer.parseInt(ns[i+1]);
                if(arr[i] == 0) zeroCount++;
            }

            Arrays.sort(arr);

            if(zeroCount > 0) {
                int[] tempArr = new int[zeroCount + 2];

                for(int i = 0; i < zeroCount + 2; i++) {
                    tempArr[i] = arr[i];
                }
                leftShift(tempArr);

                for(int i = 0; i < zeroCount + 2; i++) {
                    arr[i] = tempArr[i];
                }
            }

            StringBuilder num1 = new StringBuilder();
            StringBuilder num2 = new StringBuilder();
            for (int i = 0; i < arr.length; i++) {
                if(i % 2 == 0) num1.append(arr[i]);
                else num2.append(arr[i]);
            }

            int n1 = Integer.parseInt(num1.toString());
            int n2 = Integer.parseInt(num2.toString());

            bw.write((n1 + n2) + "\n");
            bw.flush();
        }
        bw.close();
    }

    private static void swap(int[] arr, int index1, int index2) {
        int temp = arr[index1];
        arr[index1] = arr[index2];
        arr[index2] = temp;
    }

    private static void reverse(int[] arr, int start, int end) {
        end = end - 1;
        while(start < end) {
            swap(arr, start, end);
            start++;
            end--;
        }
    }

    private static void leftShift(int[] arr) {
        int size = arr.length;
        reverse(arr, size - 2, size);
        reverse(arr, 0, size - 2);
        reverse(arr, 0, size);
    }
}

์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€