[์ธํ๋ฐ/greedy/๊ฒฐํผ์]
<<ํ์ด>>
-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 ์ด๋ค.
'์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ธํ๋ฐ/๋ค์ด๋๋ฏน(LIS)/์ต๋ ๋ถ๋ถ ์ฆ๊ฐ์์ด] (0) | 2024.05.23 |
---|---|
[์ธํ๋ฐ/BFS/12.ํ ๋งํ ] (1) | 2024.05.19 |
[๋ฐฑ์ค/1018/๊ตฌํ/์ฒด์คํ ๋ค์ ์น ํ๊ธฐ] (1) | 2024.04.11 |
[์ธํ๋ฐ/BFS/11. ๋ฏธ๋ก์ ์ต๋จ๊ฑฐ๋ฆฌ ํต๋ก] (0) | 2024.04.09 |
[๋ฐฑ์ค/1015/์์ด ์ ๋ ฌ] (1) | 2024.04.06 |
๋๊ธ