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

[์ธํ”„๋Ÿฐ/greedy/๊ฒฐํ˜ผ์‹]

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

<<ํ’€์ด>>

 

-1์ฐจ ๋‚˜์˜ ํ’€์ด-

 

ํ  ~~ ์ผ๋‹จ์€ greedy ๋ฌธ์ œ์ด์ง€๋งŒ ๊ทธ๋ƒฅ ๋‹จ์ˆœํ•˜๊ฒŒ ํ’€๋ฆฌ๋Š” ๋А๋‚Œ์ด ์žˆ์–ด์„œ ์ผ๋ฐ˜์ ์ธ ๊ตฌํ˜„์„ ํ–ˆ๊ณ ,

 

์‹ค์ œ๋กœ๋„ ๋‹ต์€ ๋งž์•˜๋‹ค!!

 

๊ทผ๋ฐ ์ „์ฒด ํ’€์ด๋Š” ์˜ค๋‹ต์œผ๋กœ ๋‚˜์™”๋‹ค ??

 

๊ทผ๋ฐ ์กฐ๊ธˆ๋งŒ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ๊นŒ ๋ฐ”๋กœ ํ‹€๋ฆฐ ์ด์œ ๊ฐ€ ๋ณด์ธ๋‹ค ใ…‹ใ…‹ใ…‹

 

์ผ๋‹จ ๋‚˜๋Š” ์ด ํŠน์ • ๊ตฌ๊ฐ„ ํ•˜๋‚˜๋งŒ์„ ๋น„๊ตํ•ด์„œ count++; ๋ฅผ ํ•ด์คฌ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ํŠน์ • ๊ตฌ๊ฐ„์—์„œ๋Š” ๊ฒน์น˜๋Š” ์‚ฌ๋žŒ์ด n๋ช…์ด ์žˆ๋”๋ผ๊ณ  ํ•ด๋„

n๋ช…๋ผ๋ฆฌ๋Š” ๋˜ ์•ˆ ๊ฒน์น  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

import java.util.ArrayList;
import java.util.Scanner;

class Data {
     int start;
     int end;

    public Data(int start, int end) {
        this.start = start;
        this.end = end;
    }
}

class Main {

    private int solution(int n, ArrayList<Data> list) {
        int answer = 0;

        for (int i = 0; i < n-1; i++) {
            int count = 0;
            for (int j = i+1; j < n; j++) {
                if(!(list.get(i).start >= list.get(j).end || list.get(i).end <= list.get(j).start)) {
                    count++;
                }
            }
            answer = Math.max(count, answer);
        }
        return answer;
    }



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

        ArrayList<Data> list = new ArrayList<>();

        for (int i=0; i<n; i++) list.add(new Data(in.nextInt(), in.nextInt()));

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

 

 

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

 

์—ญ์‹œ Greedy ๋ฌธ์ œ์˜€๊ณ  ๊ฐ•์‚ฌ๋‹˜์€ ์ด๋ฅผ ํ™œ์šฉํ•ด์„œ ๊ตฌํ–ˆ๋‹ค. 

 

S์— ์ง„์ž…์„ ํ•˜๋ฉด count++ ํ•ด์ฃผ๊ณ  end๊ฐ€ ๋‚˜์˜ค๋ฉด count-- ๋ฅผ ํ•ด์ฃผ๋ฉด ๋˜๋Š” ์›๋ฆฌ์ด๋‹ค.

 

๊ทธ๋ ‡๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ssese ์ด๋Ÿฐ์‹์œผ๋กœ ํ•œ์ค„๋กœ ์ •๋ ฌ์ด ๋˜์–ด ์žˆ์œผ๋ฉด ํšจ์œจ์ ์ด๋‹ค.

 

๊ทธ๋ž˜์„œ ArrayList์— ๋„ฃ์„ ๋•Œ S๋”ฐ๋กœ E๋”ฐ๋กœ ๋„ฃ์–ด์คŒ์œผ๋กœ์จ list์— ๋“ค์–ด๊ฐˆ ๋•Œ SE ์„ธํŠธ๊ฐ€ ์•„๋‹ˆ๊ณ  ๋”ฐ๋กœ ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด sesse ๊ฐ™์€ ๋‚˜์—ด์‹์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

์ดํ›„ ์ˆซ์ž๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ํ•˜๋ฉด ํšจ์œจ์ ์œผ๋กœ ๋‚˜์—ด ๋œ ๊ฐ’๋“ค์„ ๋ณด๋ฉด์„œ count ์ฆ๊ฐ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทผ๋ฐ ์—ฌ๊ธฐ์„œ ์กฐ์‹ฌํ•  ๋ถ€๋ถ„์€ e์™€ s๊ฐ€ ๊ฐ™์€ ์‹œ๊ฐ„๋Œ€ ์ธ ๋ถ€๋ถ„์ธ๋ฐ, ๊ฐ™์„ ๋•Œ๋Š” e s๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•ด์„œ e๊ฐ€ ๋จผ์ € ์‹คํ–‰์ด ๋˜๋„๋ก ํ•ด์•ผํ•œ๋‹ค.

 

๊ทธ๋ ‡์ง€ ์•Š๊ณ  s๋ฅผ ๋จผ์ € ํ•ด๋ฒ„๋ฆฌ๊ฒŒ ๋˜๋ฉด ๋…ผ๋ฆฌ์ ์œผ๋กœ๋Š” 2๋ช…์ด ์ตœ๋Œ€์ธ๋ฐ 3๋ช…๊นŒ์ง€ ๋“ค์–ด์˜ค๊ณ  2๋กœ ๋ณ€๊ฒฝ์ด ๋จ์œผ๋กœ ์ •๋‹ต์ด 3์ด ์ตœ๋Œ€๊ฐ€ ๋˜๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค.

 

์ฆ‰, ๋‚˜๊ฐ€์„œ ์—†์–ด์•ผ ํ•  ์‚ฌ๋žŒ์ธ๋ฐ ์ถ”๊ฐ€ ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. 

 

์ด๊นŒ์ง€ ๊ณ ๋ คํ•œ๋‹ค๋ฉด ๋ฌธ์ œ์—†์ด ํ’€ ์ˆ˜ ์žˆ๋Š” greedy ๋ฌธ์ œ์ด๋‹ค.

 

 

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

class Time implements Comparable<Time> {
    int time;
    char state;

    public Time(int time, char state) {
        this.time = time;
        this.state = state;
    }

    @Override
    public int compareTo(Time o) {
        if(this.time==o.time) return this.state - o.state;
        else return this.time - o.time;

    }
}


class Main {
    private int solution(ArrayList<Time> list) {
        int answer = Integer.MIN_VALUE;
        int cnt  = 0;
        for(Time x : list) {
            if (x.state=='S') cnt++;
            else cnt--;

            answer = Math.max(cnt, answer);
        }
        return answer;
    }


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

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

 

 

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

 

๋งค๋ฒˆ ๊นŒ๋จน๋Š”

 

Comparable<T>  ์ธํ„ฐํŽ˜์ด์Šค์™€ compareTo(T o) ์ถ”์ƒ ๋ฉ”์„œ๋“œ

 

return this.x - o.x ์ด๋ ‡๊ฒŒ ๋นผ๊ธฐ๋ฅผ ํ–ˆ์„ ๋•Œ ์˜ค๋ฅธ์ชฝ์— o.x๊ฐ€ ์žˆ๋‹ค๋ฉด ์˜ค๋ฆ„์ฐจ์ˆœ์ด๊ณ  ๊ทธ ๋ฐ˜๋Œ€์ด๋ฉด ๋‚ด๋ฆผ์ฐจ์ˆœ์ด๋‹ค.

 

๋˜ํ•œ ์ƒ์„ฑ์ž ๋ฉ”์„œ๋“œ ๋“ฑ ์ƒ์„ฑํ•˜๋Š” ๋‹จ์ถ•ํ‚ค๋Š” CMD + N ์ด๋‹ค.

 

 

๋Œ“๊ธ€