Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준2098
- 교수님의 기말고사풀이
- 백준17124
- 두 개의 배열
- 백준20126
- Codility
- export changeLog
- LangChain
- streaming chat
- 백준 도서관
- 백준1802
- 외판원순회
- 백준3078
- 백준16937
- 백준13417
- ChatOpenAI
- 두 스티커
- streamlit
- 백준1461
- BaseCallbackHandler
- Frog River One
- 백준
- 백준1720
- 백준 타일코드
- liquibse
- generateChangeLog
- 백준11332
- java
- 백준3078 풀이
- 백준 시간초과
Archives
- Today
- Total
tempcru 삽질기록
백준20126-교수님의 기말고사 풀이, java 본문
백준20126-교수님의 기말고사 풀이, java
https://www.acmicpc.net/problem/20126
문제
알고리즘 기말고사는 총 M분이 필요하다
시험장은 1개이며, 이미 다른 시험이 예약되어있다.
다른 시험은 시작시간과 시험시간이 주어진다.
시험을 언제 시작할 수 있는지 구하라.
입력
다음과 같이 입력이 주어진다.
N M S
x1 y1
. . .
xN yN
x1 y1
. . .
xN yN
출력
교수님이 시험을 시작할 수 있는 시각을 출력하여라. 시작 가능한 시각이 여러 개 있으면 그중 가장 앞선 시각을 출력한다. 시험을 치룰 수 없다면 -1을 출력하여라.
제한
- 1 ≤ N ≤ 100,000.
- 1 ≤ M ≤ S ≤ 1,000,000,000.
- 0 ≤ xi < xi + yi ≤ S.
- 입력에 주어진 수들은 전부 정수다.
풀이
- 시험시작시간을 기준으로 정렬한다
- For 문 돌면서 M분짜리 시간을 넣을 수 있는지 체크한다.
- 만약 M분짜리 시험칠 수 있으면 break 치고 끝낸다
- 주의점은 예약된 시험과 0시 사이에도 시험을 칠 수 있다는 점이다
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;
/**
* https://www.acmicpc.net/problem/20126
* title : 교수님의 기말고사
* @author tempcru
*/
public class Main {
// N <= 10만
// M,S <= 10억
static int N,M,S;
static int[][] exams;
public static void main(String[] args) throws Exception {
// System.setIn(new FileInputStream("./src/B20126/sample_data"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine().trim());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
S = Integer.parseInt(st.nextToken());
exams = new int[N][2];
for(int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
exams[i][0] = Integer.parseInt(st.nextToken());
exams[i][1] = Integer.parseInt(st.nextToken());
}
Arrays.sort(exams, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0] - o2[0];
}
});
System.out.println(search_empty());
}
private static int search_empty() {
int result = -1;
// 0 이전
int temp = exams[0][0] - M;
if(temp > -1) {
return 0;
}
// 0 ~ N-1
for(int i = 0; i < N-1; i++) {
temp = exams[i+1][0] - exams[i][0] - exams[i][1] - M;
if(temp > -1) {
result = exams[i][0] + exams[i][1];
break;
}
}
// N-1
if(result < 0) {
temp = S - exams[N-1][0] - exams[N-1][1] - M;
if(temp > -1) {
result = exams[N-1][0] + exams[N-1][1];
}
}
return result;
}
}
'Coding Test > 백준' 카테고리의 다른 글
[백준1720] 타일코드 문제 풀이 - JAVA (0) | 2022.06.14 |
---|---|
백준3078 좋은 친구 문제 풀이 - JAVA (0) | 2022.06.09 |
백준13417 카드문자열 풀이 - java (0) | 2022.06.04 |
백준1461 도서관 문제 풀이 - java (0) | 2022.06.02 |
백준17124-두 개의 배열, java (0) | 2022.05.26 |