λ°μν
λ§ν¬
https://www.acmicpc.net/problem/1931
λ¬Έμ μμ½
νμκ° κ²ΉμΉμ§ μκ² νλ©΄μ νμμ€μ μ¬μ©ν μ μλ νμμ μ΅λ κ°μ ꡬνκΈ°
μ ν
- 첫째 μ€μ νμμ μ N(1 ≤ N ≤ 100,000)μ΄ μ£Όμ΄μ§λ€.
- λμ§Έ μ€λΆν° N+1 μ€κΉμ§ κ° νμμ μ λ³΄κ° μ£Όμ΄μ§λλ° μ΄κ²μ 곡백μ μ¬μ΄μ λκ³ νμμ μμμκ°κ³Ό λλλ μκ°μ΄ μ£Όμ΄μ§λ€.
- μμ μκ°κ³Ό λλλ μκ°μ 231-1λ³΄λ€ μκ±°λ κ°μ μμ°μ λλ 0μ΄λ€.
νμ΄
νμμ μκ° μ΅λ 10^6μ΄λ―λ‘ μκ° λ³΅μ‘λκ° `O(N log N)`μ λμΌλ©΄ μ λ©λλ€.
νμλ₯Ό μ΅λν λ§μ΄ μ ννλ €λ©΄ μ΄λ€ κΈ°μ€μΌλ‘ νμ΄μΌ ν κΉμ?
ν΅μ¬μ νμ μ’ λ£ μκ°μ΄ λΉ λ₯Όμλ‘ μ νν μ μλ νμκ° λ§μμ§λ€μ λλ€.
- λλλ μκ°μ κΈ°μ€μΌλ‘ μ€λ¦μ°¨μμΌλ‘ μ λ ¬νλ€.
- λλλ μκ°μ΄ κ°λ€λ©΄, μμ μκ°μ΄ λΉ λ₯Έ κ²μ΄ λ¨Όμ μ€κ² νλ€.
- ex) `(1,4)`, `(4,4)`
- μμ μκ°μ΄ λΉ λ₯Έ κ²μ΄ λ¨Όμ μ€μ§ μκ³ `(4,4)`λ₯Ό λ¨Όμ μ ννλ©΄ `(1,4)`λ μ νν μ μλ€.
- `(1,4)`μ `(4,4)`λ₯Ό λͺ¨λ μ ννλ κ²μ΄ μ΅λ κ°μμ΄λ€.
- ex) `(1,4)`, `(4,4)`
- μ λ ¬λ λ°°μ΄μμ νλμ© μννλ©°, λ§μ§λ§μΌλ‘ μ νλ νμμ κ·Έλ€μ νμ μκ°μ΄ κ²ΉμΉμ§ μμΌλ©΄ μ΄λ₯Ό μ ννλ€.
- λ§μ½ κ²ΉμΉλ€λ©΄, κ·Έλ€μ μΈλ±μ€ νμμ λΉκ΅νλ€.
- κ²ΉμΉλ 쑰건μ `μ΄μ νμκ° λλλ μκ°` ≤ `λ€μ νμκ° μμνλ μκ°`
μ λ ¬ν ν, 첫 λ²μ§Έ νμλ 무쑰건 μ νλκΈ° λλ¬Έμ μΉ΄μ΄νΈ κ°μ 1λ‘ μ΄κΈ°νν ν μμνμ΅λλ€.
μ½λ
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
Meeting[] meetings = new Meeting[N];
for(int i=0; i<N; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
meetings[i] = new Meeting(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
}
Arrays.sort(meetings);
int preidx = 0; // λ§μ§λ§μΌλ‘ μ νλ νμ μΈλ±μ€
int cnt = 1; // 첫 λ²μ§Έ νμ μ ν
for(int i=1; i<N; i++){
if(meetings[preidx].end<=meetings[i].start){
preidx=i;
cnt++;
}
}
System.out.println(cnt);
}
static class Meeting implements Comparable<Meeting>{
public int start;
public int end;
Meeting(int start, int end){
this.start = start;
this.end = end;
}
@Override
public int compareTo(Meeting o) {
if (this.end == o.end) {
return Integer.compare(this.start, o.start); // μ’
λ£ μκ°μ΄ κ°μΌλ©΄ μμ μκ° κΈ°μ€μΌλ‘ μ€λ¦μ°¨μ
}
return Integer.compare(this.end, o.end); // μ’
λ£ μκ° κΈ°μ€μΌλ‘ μ€λ¦μ°¨μ
}
}
}
π· μκ° λ³΅μ‘λ
- `N`: νμμ μ
- sort ν¨μ: `O(N logN)`
- for λ¬Έ: `O(N)`
- μ΅μ’ μκ° λ³΅μ‘λ: `O(N)`+ `O(N logN)` = `O(N logN)`
π· μ€ν μλ
Time: 544 ms, Memory: 44928 KB
λ°μν
'πͺ Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [BOJ/λ°±μ€] 13023 ABCDE(JAVA) (1) | 2025.02.12 |
|---|---|
| [BOJ/λ°±μ€] 2178 λ―Έλ‘ νμ(JAVA) (1) | 2025.02.11 |
| [BOJ/λ°±μ€] 2573 λΉμ° (JAVA) (1) | 2025.02.09 |
| [BOJ/λ°±μ€] 4963. μ¬μ κ°μ (JAVA) (1) | 2025.02.07 |