문제
서준이는 아빠로부터 N개의 회의와 하나의 회의실을 선물로 받았다. 각 회의는 시작 시간, 끝나는 시간, 회의 인원이 주어지고 한 회의실에서 동시에 두 개 이상의 회의가 진행될 수 없다. 단, 회의는 한번 시작되면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작 시간은 끝나는 시간보다 항상 작다. N개의 회의를 회의실에 효율적으로 배정할 경우 회의를 진행할 수 있는 최대 인원을 구하자.
입력
첫째 줄에 회의의 수 N이 주어진다. 둘째 줄부터 N + 1 줄까지 공백을 사이에 두고 회의의 시작시간, 끝나는 시간, 회의 인원이 주어진다.
출력
첫째 줄에 회의실에서 회의를 진행할 수 있는 최대 인원을 출력한다.
제한
- 1 ≤ N ≤ 25
- 임의의 회의 K(1≤ K ≤ N)는 회의 K − 1과 회의 K + 1과는 회의 시간이 겹치고 다른 회의들과는 회의 시간이 겹치지 않는다.
- 모든 회의의 시작 시간과 끝나는 시간은 231 − 1보다 작거나 같은 자연수 또는 0이다.
- 모든 회의의 시작 시간과 끝나는 시간은 서로 다르다.
- 회의 인원은 1,000보다 작거나 같은 자연수 이다.
예제 입출력

문제풀이
부분집합
- 임의의 회의 K(1≤ K ≤ N)는 회의 K − 1과 회의 K + 1과는 회의 시간이 겹치고 다른 회의들과는 회의 시간이 겹치지 않는다.
-- 해당 조건이 있어서 부분 집합 만드는 메서드에서 i+2로 start지점을 정해주었다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int tc;
static int[][] arr;
static int max=0;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
tc = Integer.parseInt(br.readLine());
arr = new int[tc][3];
for (int i = 0; i < tc; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
arr[i][0] = Integer.parseInt(st.nextToken());
arr[i][1] = Integer.parseInt(st.nextToken());
arr[i][2] = Integer.parseInt(st.nextToken());
}
sub(0,0);
System.out.println(max);
}
private static void sub(int s,int sum) {
if(s>tc-1) {
if(max<sum) max=sum;
return;
}
for(int i=s;i<tc;i++) {
sub(i+2,sum+arr[i][2]);
}
}
}
'알고리즘 문제풀이' 카테고리의 다른 글
| [JAVA] 백준 #17281 야구 (0) | 2023.02.19 |
|---|---|
| [JAVA] 백준 #14888 연산자 끼워넣기 (0) | 2023.02.18 |
| [JAVA] 백준 #7507 올림픽 게임 (0) | 2023.02.11 |
| [JAVA] 백준 #1992 쿼드트리 (0) | 2023.02.11 |
| [JAVA] 백준 #2312 수 복원하기 (0) | 2023.02.11 |