๐Ÿฅˆ [Baekjoon / Java] 18353. ๋ณ‘์‚ฌ ๋ฐฐ์น˜ํ•˜๊ธฐ

์ดํ•˜์–€ยท2024๋…„ 7์›” 14์ผ
0

๐Ÿฃ ๋ฐฑ์ค€

๋ชฉ๋ก ๋ณด๊ธฐ
33/37

๋ฌธ์ œ ์„ค๋ช…


๐Ÿ’ก Info

๋‚ด์šฉ

N๋ช…์˜ ๋ณ‘์‚ฌ๊ฐ€ ๋ฌด์ž‘์œ„๋กœ ๋‚˜์—ด๋˜์–ด ์žˆ๋‹ค. ๊ฐ ๋ณ‘์‚ฌ๋Š” ํŠน์ •ํ•œ ๊ฐ’์˜ ์ „ํˆฌ๋ ฅ์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋ณ‘์‚ฌ๋ฅผ ๋ฐฐ์น˜ํ•  ๋•Œ๋Š” ์ „ํˆฌ๋ ฅ์ด ๋†’์€ ๋ณ‘์‚ฌ๊ฐ€ ์•ž์ชฝ์— ์˜ค๋„๋ก ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋ฐฐ์น˜๋ฅผ ํ•˜๊ณ ์ž ํ•œ๋‹ค. ๋‹ค์‹œ ๋งํ•ด ์•ž์ชฝ์— ์žˆ๋Š” ๋ณ‘์‚ฌ์˜ ์ „ํˆฌ๋ ฅ์ด ํ•ญ์ƒ ๋’ค์ชฝ์— ์žˆ๋Š” ๋ณ‘์‚ฌ๋ณด๋‹ค ๋†’์•„์•ผ ํ•œ๋‹ค.

๋˜ํ•œ ๋ฐฐ์น˜ ๊ณผ์ •์—์„œ๋Š” ํŠน์ •ํ•œ ์œ„์น˜์— ์žˆ๋Š” ๋ณ‘์‚ฌ๋ฅผ ์—ด์™ธ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด์„œ๋„ ๋‚จ์•„์žˆ๋Š” ๋ณ‘์‚ฌ์˜ ์ˆ˜๊ฐ€ ์ตœ๋Œ€๊ฐ€ ๋˜๋„๋ก ํ•˜๊ณ  ์‹ถ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, N=7์ผ ๋•Œ ๋‚˜์—ด๋œ ๋ณ‘์‚ฌ๋“ค์˜ ์ „ํˆฌ๋ ฅ์ด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

์ด ๋•Œ 3๋ฒˆ ๋ณ‘์‚ฌ์™€ 6๋ฒˆ ๋ณ‘์‚ฌ๋ฅผ ์—ด์™ธ์‹œํ‚ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚จ์•„์žˆ๋Š” ๋ณ‘์‚ฌ์˜ ์ˆ˜๊ฐ€ ๋‚ด๋ฆผ์ฐจ์ˆœ์˜ ํ˜•ํƒœ๊ฐ€ ๋˜๋ฉฐ 5๋ช…์ด ๋œ๋‹ค. ์ด๋Š” ๋‚จ์•„์žˆ๋Š” ๋ณ‘์‚ฌ์˜ ์ˆ˜๊ฐ€ ์ตœ๋Œ€๊ฐ€ ๋˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

๋ณ‘์‚ฌ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋‚จ์•„์žˆ๋Š” ๋ณ‘์‚ฌ์˜ ์ˆ˜๊ฐ€ ์ตœ๋Œ€๊ฐ€ ๋˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์—ด์™ธํ•ด์•ผ ํ•˜๋Š” ๋ณ‘์‚ฌ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๐Ÿ“ฅ์ž…๋ ฅ ์กฐ๊ฑด

  • ์ฒซ์งธ ์ค„์— N์ด ์ฃผ์–ด์ง„๋‹ค. (1 โ‰ค N โ‰ค 2,000)
  • ๋‘˜์งธ ์ค„์— ๊ฐ ๋ณ‘์‚ฌ์˜ ์ „ํˆฌ๋ ฅ์ด ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฐจ๋ก€๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค.
  • ๊ฐ ๋ณ‘์‚ฌ์˜ ์ „ํˆฌ๋ ฅ์€ 10,000,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.
7
15 11 4 8 5 2 4

๐Ÿ“ค์ถœ๋ ฅ ์กฐ๊ฑด

  • ์ฒซ์งธ ์ค„์— ๋‚จ์•„์žˆ๋Š” ๋ณ‘์‚ฌ์˜ ์ˆ˜๊ฐ€ ์ตœ๋Œ€๊ฐ€ ๋˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์—ด์™ธํ•ด์•ผ ํ•˜๋Š” ๋ณ‘์‚ฌ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
2


๋ฌธ์ œ ์ดํ•ด


  • ์—ด์™ธํ•ด์•ผํ•˜๋Š” ๋ณ‘์‚ฌ์˜ ์ˆ˜๋ฅผ ๊ณ„์‚ฐ -> ๋‚จ์•„์žˆ๋Š” ๋ณ‘์‚ฌ์˜ ์ˆ˜๊ฐ€ ์ตœ๋Œ€๊ฐ€ ๋˜๊ฒŒ!
    • ์ „ํˆฌ๋ ฅ์ด ๋†’์€ ๋ณ‘์‚ฌ๊ฐ€ ์•ž์ชฝ์— ์˜ค๊ฒŒ ๋‚ด๋ฆผ์ฐจ์ˆœ ๋ฐฐ์น˜
    • ํŠน์ •ํ•œ ์œ„์น˜์— ์žˆ๋Š” ๋ณ‘์‚ฌ๋ฅผ ์—ด์™ธ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ์ด์šฉ, ๊ทธ๋Ÿฌ๋ฉด์„œ๋„ ๋ณ‘์‚ฌ์˜ ์ˆ˜๊ฐ€ ์ตœ๋Œ€๊ฐ€ ๋˜๋„๋ก ํ•˜๊ธฐ


์•Œ๊ณ ๋ฆฌ์ฆ˜


์‹ค์ œ ํ’€์ด ์‹œ๊ฐ„ : 12๋ถ„

  • ์ž…๋ ฅ

    • N ์ž…๋ ฅ๋ฐ›๊ธฐ
    • ๋ณ‘์‚ฌ ๋ฒˆํ˜ธ, ์ „ํˆฌ๋ ฅ ๋ฐฐ์—ด ์ž…๋ ฅ๋ฐ›๊ธฐ
  • ๊ณ„์‚ฐ

    • d๋กœ ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ
    • ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•˜๊ธฐ
    • ๋ฐ”ํ…€์—…์œผ๋กœ ๊ตฌํ˜„
      • Math.max๋กœ ์ตœ๋Œ€ ๋ณ‘์‚ฌ์˜ ์ˆ˜ ๊ตฌํ˜„
      • ์ „์ฒด - ์—ด์™ธ ๋ณ‘์‚ฌ ์ˆ˜๋กœ ์ถœ๋ ฅ
  • ์ถœ๋ ฅ

    • ์ „์ฒด์—์„œ ์ตœ๋Œ€๊ฐ’ ์ œ๊ฑฐํ•ด์„œ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
import java.util.*;

public class Main {

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

        N = sc.nextInt();

        Integer[] arr = new Integer[N];
        for(int i=0; i<N; i++){
            arr[i] = sc.nextInt();
        }

        Arrays.sort(arr, Collections.reverseOrder());

        d = new int[N];
        Arrays.fill(d, 1);

        for(int i = 1; i<N; i++){
            for(int j = 0; j< i; j++) {
                if(arr[j] > arr[i]){
                    d[i] = Math.max(d[i], d[j]+1);
                }
            }
        }

        for(int i=0; i<N; i++){
            maxSol = Math.max(maxSol, d[i]);
        }
        System.out.println(N - maxSol);

    }
}


์˜ค๋‹ต์ฒดํฌ


  • ์ •๋ ฌ์„ ํ•˜๊ณ  ๋‚˜์„œ ๊ณ„์‚ฐ์„ ์ง„ํ–‰ํ•˜๋‹ˆ ๋ฌธ์ œ ๋ฐœ์ƒ
    • ์ •๋ ฌ ์ œ๊ฑฐํ•˜๊ณ , ๋ฐ”๋กœ Arrays.fill ์ง„ํ–‰ํ•˜๋„๋ก ํ•ด ํ•ด๊ฒฐ
//before
Arrays.sort(arr, Collections.reverseOrder());

d = new int[N];
Arrays.fill(d, 1);
//after
d = new int[N];
Arrays.fill(d, 1);


์ตœ์ข… ํ’€์ด


์‹ค์ œ ํ’€์ด ์‹œ๊ฐ„ : 20๋ถ„(์ฒซ ํ’€์ด ์‹œ๊ฐ„ ํฌํ•จ)

  • ์ž…๋ ฅ

    • N ์ž…๋ ฅ๋ฐ›๊ธฐ
    • ๋ณ‘์‚ฌ ๋ฒˆํ˜ธ, ์ „ํˆฌ๋ ฅ ๋ฐฐ์—ด ์ž…๋ ฅ๋ฐ›๊ธฐ
  • ๊ณ„์‚ฐ

    • d๋กœ ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ
    • ๋ฐ”ํ…€์—…์œผ๋กœ ๊ตฌํ˜„
      • Math.max๋กœ ์ตœ๋Œ€ ๋ณ‘์‚ฌ์˜ ์ˆ˜ ๊ตฌํ˜„
      • ์ „์ฒด - ์—ด์™ธ ๋ณ‘์‚ฌ ์ˆ˜๋กœ ์ถœ๋ ฅ
  • ์ถœ๋ ฅ

    • ์ „์ฒด์—์„œ ์ตœ๋Œ€๊ฐ’ ์ œ๊ฑฐํ•ด์„œ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
import java.util.*;

public class Main {

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

        N = sc.nextInt();

        Integer[] arr = new Integer[N];
        for(int i=0; i<N; i++){
            arr[i] = sc.nextInt();
        }

        d = new int[N];
        Arrays.fill(d, 1);

        for(int i = 1; i<N; i++){
            for(int j = 0; j< i; j++) {
                if(arr[j] > arr[i]){
                    d[i] = Math.max(d[i], d[j]+1);
                }
            }
        }

        for(int i=0; i<N; i++){
            maxSol = Math.max(maxSol, d[i]);
        }
        System.out.println(N - maxSol);

    }
}

profile
์–ธ์  ๊ฐ€ ๋‚ด ์ฝ”๋“œ๋กœ ์„ธ์ƒ์— ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๋„๋ก, BE&Data Science ๊ฐœ๋ฐœ ๊ธฐ๋ก ๋…ธํŠธโ˜˜๏ธ

0๊ฐœ์˜ ๋Œ“๊ธ€