일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- MariaDB
- 객체지향
- dfs
- git
- PostgreSQL
- mock
- bfs
- npm
- 추상화
- package
- DP
- process.env
- Secret
- AOP
- 디자인 패턴
- azure
- Java
- netlify
- dotenv
- 동적계획법
- GOF
- 서브셋폰트
- github
- CSS
- 클라우드
- Solid
- 캡슐화
- 상속
- 메모이제이션
- 다형성
Archives
- Today
- Total
이것저것 해보기🌼
[BOJ] 1931번. 회의실 배정 - Greedy 알고리즘 본문
문제 : https://www.acmicpc.net/problem/1931
Greedy 알고리즘의 가장 기본 문제로 많이 나온다.
탐욕법은 미래는 생각하지 않고 각 단계마다 지금 당장 가장 좋은 방법만을 선택한다.
따라서 이 문제에서 길이와 상관없이 가장 먼저 끝나는 회의부터 선택하고, 겹치는 회의를 모두 제거한 뒤 모든 회의들이 없어질때까지 반복하면 최적해가 구해질 것이다.
하지만 이렇게는 전체 시간 복잡도가 O(N^2)이 되므로,
먼저 회의시간을 빨리 끝나는 순서대로 sort 하면, 겹치는 회의를 없앨 필요없이 순회하면서 선택하기만 하면 된다.
이렇게하면 정렬에 걸리는 시간 O(NlogN) 이 시간복잡도가 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
public static int N;
public static int[][]arr;
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
arr = new int[N][2];
for(int i=0; i<N; i++){
arr[i][0] = sc.nextInt();
arr[i][1] = sc.nextInt();
}
Arrays.sort(arr, new Comparator<int[]>() {
public int compare(int[] o1, int[] o2){
if(o1[1] == o2[1]){
return o1[0] - o2[0];
}
return o1[1] - o2[1];
}
});
int count = 0;
int prev_end_time = 0;
for(int i=0; i<N; i++){
if(prev_end_time <= arr[i][0]){
prev_end_time = arr[i][1];
count++;
}
}
System.out.println(count);
sc.close();
}
}
|
cs |
'코딩테스트' 카테고리의 다른 글
2021 KAKAO BLIND RECRUITMENT (0) | 2022.09.09 |
---|---|
[BOJ] 16985번:Maaaaaaaaaze - 완전탐색(Permutation), BFS, 구현 (0) | 2022.09.08 |
DP (dynamic programming) 연습 (0) | 2022.09.07 |
[프로그래머스] 송전탑 분할 (0) | 2021.07.11 |
[자료구조] List, Map, Set, Stack, Queue 연습 (JAVA) (0) | 2021.07.02 |