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

[์ธํ”„๋Ÿฐ/Greedy/1.์”จ๋ฆ„์„ ์ˆ˜]

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

<<ํ’€์ด>>

 

์ด ๋ฌธ์ œ๋Š” Greedy ๋ผ๋Š” ๋ฐฉ์‹์„ ์ฑ„ํƒํ•˜์—ฌ ํ‘ธ๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ด๋ฅผ ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  ์ ‘๊ทผ ํ•œ๋‹ค๋ฉด ์ƒ๊ฐ๋ณด๋‹ค ๋ณต์žกํ•œ ํ˜•ํƒœ๋กœ ์ฝ”๋“œ๊ฐ€ ๊ตฌ์„ฑ์ด ๋˜๊ณ 

 

์ž์นซ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ N^2๊ฐ€ ๋˜๋ฏ€๋กœ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Greedy์˜ ์˜๋ฏธ์ธ  <<๊ฐ ์„ ํƒ์˜ ์ˆœ๊ฐ„์— ๊ฐ€๋Šฅํ•œ ์ตœ์„ ์˜ ๊ฒฐ์ •์„ ๋‚ด๋ ค ์ „์ฒด์ ์ธ ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •์„ ๋‹จ์ˆœํ™”ํ•˜๊ณ , ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.>>

 

์—ฌ๊ธฐ์„œ๋Š” ํ‚ค๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋งŒ๋“ฆ์œผ๋กœ์จ ๋ชธ๋ฌด๊ฒŒ๋งŒ ๋น„๊ตํ•˜๋ฉด ๋˜๋Š” ํ˜•ํƒœ๋กœ ์ตœ์ ํ™” ์‹œ์ผฐ๋‹ค.

 

ํ‚ค๋ฅผ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐ์ฒด๋ฅผ ์ •๋ ฌํ•ด์•ผ ํ•˜๋Š”๋ฐ, Comparable<>์™€ compareTo() ๋ฅผ ์ด์šฉํ•ด์„œ ๊ตฌํ–ˆ๋‹ค. 

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

class Main {
    private int solution(Body[] body, int n){
        int max = body[0].w;
        int count = 1;
        for (int i = 1; i < n; i++) {
            if (max < body[i].w) {
                max = body[i].w;
                count++;
            }
        }
        return count;
    }



    public static void main(String[] args) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        Body[] body = new Body[n];
        for (int i = 0; i < n; i++) {
            body[i] = new Body(in.nextInt(), in.nextInt());
        }
        Arrays.sort(body);

        System.out.println(T.solution(body, n));
    }
}

class Body implements Comparable<Body> {
    public int h, w;
    Body(int h, int w) {
        this.h = h;
        this.w = w;
    }
    @Override
    public int compareTo(Body o) {
        return o.h - this.h; //๋‚ด๋ฆผ์ฐจ์ˆœ
    }
}

 

-๊ฐ•์‚ฌ๋‹˜ ํ’€์ด-

 

๊ฐ•์‚ฌ๋‹˜์€ ArrayList ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ–ˆ์œผ๋ฏ€๋กœ Arrays.sort๊ฐ€ ์•„๋‹ˆ๋ผ Collections.sort๋ฅผ ์ด์šฉํ–ˆ๋‹ค.

 

๋‚˜๋จธ์ง€๋Š” ๋™์ผ !!

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

class Main {
    private int solution(ArrayList<Body> list, int n){
        int max = Integer.MIN_VALUE;
        int count = 0;
       for (Body body : list) {
           if (body.w > max) {
               max = body.w;
               count++;
           }
       }
        return count;
    }



    public static void main(String[] args) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        ArrayList<Body> list = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            list.add( new Body(in.nextInt(), in.nextInt()));
        }
        Collections.sort(list);

        System.out.println(T.solution(list, n));
    }
}

class Body implements Comparable<Body> {
    public int h, w;
    Body(int h, int w) {
        this.h = h;
        this.w = w;
    }
    @Override
    public int compareTo(Body o) {
        return o.h - this.h; //๋‚ด๋ฆผ์ฐจ์ˆœ
    }
}

 

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

 

๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ•ต์‹ฌ ์•„์ด๋””์–ด๋Š” ๋งค ์ˆœ๊ฐ„ ๊ฐ€์žฅ ์ข‹์€ ๊ฒƒ๋งŒ์„ ์„ ํƒํ•จ์œผ๋กœ์จ, ์ตœ์ข…์ ์œผ๋กœ ์ „์ฒด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์ด ์ตœ์ ์ด ๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์—์„œ "์ตœ์ ์ธ ์ƒํƒœ๋ฅผ ๋งŒ๋“ ๋‹ค"๋Š” ๊ฒƒ์€, ๊ฐ ์„ ํƒ์˜ ์ˆœ๊ฐ„์— ๊ฐ€๋Šฅํ•œ ์ตœ์„ ์˜ ๊ฒฐ์ •์„ ๋‚ด๋ ค ์ „์ฒด์ ์ธ ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •์„ ๋‹จ์ˆœํ™”ํ•˜๊ณ , ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด ๋ฐฉ๋ฒ•์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ž‘๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‘ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

  1. ๊ทธ๋ฆฌ๋”” ์„ ํƒ ์†์„ฑ: ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๊ฐ ๋‹จ๊ณ„์—์„œ ํ•˜๋‚˜์˜ ์ตœ์ ํ•ด๋ฅผ ์„ ํƒํ•  ๋•Œ, ์ด ์„ ํƒ์ด ์ตœ์ข…์ ์œผ๋กœ ์ „์ฒด ๋ฌธ์ œ์˜ ์ตœ์ ํ•ด๋ฅผ ๋ณด์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐ ๋‹จ๊ณ„์—์„œ์˜ ์ตœ์ ์˜ ์„ ํƒ์ด ์ „์ฒด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์žˆ์–ด์„œ๋„ ์ตœ์ ์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  2. ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ: ๋ฌธ์ œ์˜ ์ตœ์ ํ•ด๊ฐ€ ํ•ด๋‹น ๋ฌธ์ œ์˜ ๋ถ€๋ถ„ ๋ฌธ์ œ๋“ค์˜ ์ตœ์ ํ•ด๋กœ๋ถ€ํ„ฐ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฌธ์ œ๋ฅผ ๋” ์ž‘์€ ๋ถ€๋ถ„ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด ํ•ด๊ฒฐํ•œ ๋‹ค์Œ, ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„ ๋ฌธ์ œ๋“ค์˜ ํ•ด๊ฒฐ์ฑ…์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์ „์ฒด ๋ฌธ์ œ์˜ ํ•ด๊ฒฐ์ฑ…์„ ๋„์ถœํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ด๋Ÿฌํ•œ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋  ๋•Œ ํšจ๊ณผ์ ์ด๋ฉฐ, ๋ฌธ์ œ์— ๋”ฐ๋ผ ๋งค์šฐ ํšจ์œจ์ ์ด๊ณ  ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ๋ฌธ์ œ์— ๋Œ€ํ•ด ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ตœ์ ์˜ ํ•ด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ, ํŠน์ • ๋ฌธ์ œ์˜ ํŠน์„ฑ๊ณผ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ ์šฉ ๊ฐ€๋Šฅ์„ฑ๊ณผ ํšจ์œจ์„ฑ์ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ, ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ„๊ฒฐํ•˜๊ณ  ์ง๊ด€์ ์ธ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๊ทธ ์ ์šฉ์ด ์ ์ ˆํ•œ์ง€, ๊ทธ๋ฆฌ๊ณ  ๋ฌธ์ œ์˜ ์š”๊ตฌ ์กฐ๊ฑด์— ๋งž๋Š” ์ตœ์ ์˜ ํ•ด๋ฅผ ์‹ค์ œ๋กœ ์ œ๊ณตํ•˜๋Š”์ง€๋Š” ๊ฐ๊ฐ์˜ ๋ฌธ์ œ๋งˆ๋‹ค ์‹ ์ค‘ํ•˜๊ฒŒ ๊ฒ€ํ† ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€