๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

[๋ฐฑ์ค€/1015/์ˆ˜์—ด ์ •๋ ฌ]

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2024. 4. 6.

https://www.acmicpc.net/problem/1015

 

1015๋ฒˆ: ์ˆ˜์—ด ์ •๋ ฌ

P[0], P[1], ...., P[N-1]์€ 0๋ถ€ํ„ฐ N-1๊นŒ์ง€(ํฌํ•จ)์˜ ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ์”ฉ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ์ˆ˜์—ด์ด๋‹ค. ์ˆ˜์—ด P๋ฅผ ๊ธธ์ด๊ฐ€ N์ธ ๋ฐฐ์—ด A์— ์ ์šฉํ•˜๋ฉด ๊ธธ์ด๊ฐ€ N์ธ ๋ฐฐ์—ด B๊ฐ€ ๋œ๋‹ค. ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ B[P[i]] = A[i]์ด๋‹ค. ๋ฐฐ์—ด A๊ฐ€ ์ฃผ

www.acmicpc.net

 

<<ํ’€์ด>>

 

DP

 

ํ’€์ด 1

 

-> ์ผ๋‹จ ์ด ํ’€์ด๋Š” ํ‹€๋ฆฐ ๋‹ต์ด๋‹ค ใ…‹ใ…‹

๋…ผ๋ฆฌ์ ์œผ๋กœ๋Š” ๋งž๋‹ค๊ณ ๋Š” ์ƒ๊ฐํ–ˆ์ง€๋งŒ hashmap์„ ํŠน์„ฑ์„ ๊ฐ„๊ณผํ•˜๊ณ  ํ’€์—ˆ๋‹ค ใ… 

map์€ ์ค‘๋ณต ์ธ๋ฑ์Šค๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋‹ค๋ณด๋‹ˆ ์ด๋ฏธ ์žˆ๋Š” ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ธฐ์กด์˜ ์ธ๋ฑ์Šค๋ฅผ ์ง€์šฐ๊ณ  ์ƒˆ๋กญ๊ฒŒ ๋„ฃ์–ด์ค€๋‹ค. 

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ‘์˜ ํ’€์ด๋Š” ํ‹€๋ฆฌ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค ใ…‹ใ…‹

import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;

class Main {
    private int[] solution(HashMap<Integer, Integer> map, int[] brr, int n) {
        int[] answer = new int[n];
        for (int i=0; i<n; i++) {
            answer[i] = map.get(brr[i]);
            map.put(brr[i], map.get(brr[i])+1);
        }
        return answer;

    }



    public static void main(String[] args){
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        HashMap<Integer, Integer> map = new HashMap<>();
        int n = in.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = in.nextInt();
        }
        int[] brr = new int[n];
        System.arraycopy(arr, 0, brr, 0, arr.length);
        Arrays.sort(arr);


        for (int i = 0; i < n; i++) {
            map.put(arr[i], i);
        }

        for(int x : T.solution(map, brr, n)) System.out.print(x + " ");

    }
}

 

 

ํ’€์ด2

 

์ผ๋ฐ˜์ ์œผ๋กœ ๊ตฌํ˜„์„ ํ•œ ํ’€์ด์ด๋‹ค. ์ด ํ’€์ด์˜ ํ•ต์‹ฌ์€  3๊ฐ€์ง€์ด๋‹ค. ์šฐ์„  ์ •๋ ฌ์ด๋‹ค. ์ •๋ ฌ์„ ํ•˜๊ฒŒ ๋˜๋ฉด ์ˆœ์„œ๊ด€๋ จํ•œ ๋ฌธ์ œ์—์„œ ์›ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’์„ ๊ตฌํ•˜๊ธฐ๊ฐ€ ์‰ฌ์›Œ์ง„๋‹ค. ๊ทธ๋‹ค์Œ ์ธ๋ฑ์Šค ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๊ธฐ ์œ„ํ•œ P ๋ฐฐ์—ด, ๋„ฃ์–ด์ค€ ๋ฐฐ์—ด์€ ๋˜ ๋‹ค์‹œ ์‚ฌ์šฉ๋˜๋ฉด ์•ˆ ๋˜๊ธฐ ๋•Œ๋ฌธ์— (๋ˆ„๋ฝ ๋ฐœ์ƒ) 1๋ฅผ ์คŒ์œผ๋กœ์จ ๋ˆ„๋ฝ๊ณ„์‚ฐ ํ”ผํ•˜๊ธฐ์ธ sortedIndex ๋ฐฐ์—ด์„ ์คŒ์œผ๋กœ์จ ๋ฌธ์ œ๋ฅผ ์ˆ˜์›”ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ฌธ์ œ ์ž์ฒด๋Š” ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ค์šด ๊ฒƒ์ด ์•„๋‹Œ๋ฐ ์•ฝ๊ฐ„ ํ•ด๋งจ๊ฑฐ๋ฅผ ๋ณด๋‹ˆ ์•„์ง ๋‚œ ํ•œ์ฐธ ๋ฉ€์—ˆ๋‹ค ใ…‹ใ…‹ ใ…Žใ…Ž

 

๋” ์—ด์‹ฌํžˆ ํ•˜์ž !!

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt(); // ๋ฐฐ์—ด A์˜ ํฌ๊ธฐ N ์ž…๋ ฅ
        int[] a = new int[n]; // ๋ฐฐ์—ด A
        Integer[] p = new Integer[n]; // ๋น„๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋งŒ๋“œ๋Š” ์ˆ˜์—ด P
        int[] sortedIndex = new int[n]; // ์ •๋ ฌ๋œ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ์ถ”์ 

        for (int i = 0; i < n; i++) {
            a[i] = in.nextInt(); // ๋ฐฐ์—ด A์˜ ์›์†Œ ์ž…๋ ฅ
            p[i] = i; // ์ดˆ๊ธฐ์— P[i]๋ฅผ i๋กœ ์„ค์ •
        }

        // ๋ฐฐ์—ด A๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ์ •๋ ฌ
        int[] sortedA = a.clone();
        Arrays.sort(sortedA);

        // ์ •๋ ฌ๋œ ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ์— ๋Œ€ํ•ด ์›๋ณธ ๋ฐฐ์—ด์—์„œ์˜ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ์•„ P ๋ฐฐ์—ด์— ํ• ๋‹น
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (sortedA[i] == a[j] && sortedIndex[j] == 0) {
                    sortedIndex[j] = 1; // ์ธ๋ฑ์Šค ์‚ฌ์šฉ ํ‘œ์‹œ
                    p[j] = i; // P ๋ฐฐ์—ด์— ์ •๋ ฌ๋œ ์ธ๋ฑ์Šค ํ• ๋‹น
                    break;
                }
            }
        }

        // ๋น„๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋งŒ๋“œ๋Š” ์ˆ˜์—ด P ์ถœ๋ ฅ
        for (int i = 0; i < n; i++) {
            System.out.print(p[i] + " ");
        }
    }
}

 

import java.util.Arrays;
import java.util.Scanner;

class Main {
    static int n;
    static int[] P;
    static int[] ch;

    private int[] solution(int[] arr, int[] brr) {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (brr[i] == arr[j] && ch[j] == 0) {
                    ch[j] = 1;
                    P[j] = i;
                    break;
                }
            }
        }
        return P;
    }



    public static void main(String[] args) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        n = in.nextInt();
        int[] arr = new int[n];

        P = new int[n];
        ch = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = in.nextInt();
        }
        int[] brr = arr.clone();
        Arrays.sort(brr);


        for(int x : T.solution(arr, brr)) System.out.print(x + " ");

    }
}

 

 

<<์ถ”๊ฐ€ ๊ณต๋ถ€>>

 

 System.arraycopy(arr, 0, brr, 0, arr.length);

-> ๋ฐฐ์—ด์„ ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋ฐฐ์—ด์„ ์ถ”๊ฐ€ํ•  ๋•Œ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

ํ•ด์„ค : arr ๋ฐฐ์—ด ์ธ๋ฑ์Šค 0๋ถ€ํ„ฐ (arr[0]) ํ•ด์„œ brr ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค 0๋ถ€ํ„ฐ (brr[0]) arr.length - 1๊นŒ์ง€  arr์„ ๋ณต์‚ฌํ•˜๊ฒ ๋‹ค. 

์ฃผ๋กœ ํ•ฉ์น ๋•Œ ๋งŽ์ด ์ด์šฉํ•  ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋œ๋‹ค.

 

clone

-> ์ด๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค. brr = arr.clone(); ์„ ํ•˜๊ฒŒ ๋˜๋ฉด arr๋ฐฐ์—ด์„ ๊ทธ๋Œ€๋กœ brr์— ๊ฐ€์ ธ์˜ค๊ฒŒ ๋œ๋‹ค. ์ฃผ๋กœ ๋ฐฐ์—ด์„ ๋ณ€ํ˜•ํ•˜๊ธฐ ์ „์— ๊ธฐ์กด ๊ฐ’์„ ๋นผ๋‘๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

๋Œ“๊ธ€