풀이
구현 문제이다.
엘리베이터의 속도를 계산해서
테스트 중일때 제한속도를 초과할 경우 가장 큰 값을 구해주면 된다.
크게 3가지 경우가 있다.
1. 제한속도 체크 구간의 길이가 테스트 구간 길이보다 작을경우
2. 제한속도 체크 구간의 길이가 테스트 구간 길이보다 클 경우
3. 두 개가 같을경우
위에 경우의수에 알맞은 구현을 해주면 된다.
import java.util.*;
import java.io.*;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int[][] limitSpeedArr = new int[N][2];
int[][] testSpeedArr = new int[M][2];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
limitSpeedArr[i][0] = Integer.parseInt(st.nextToken());
limitSpeedArr[i][1] = Integer.parseInt(st.nextToken());
}
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
testSpeedArr[i][0] = Integer.parseInt(st.nextToken());
testSpeedArr[i][1] = Integer.parseInt(st.nextToken());
}
int overSpeed = 0;
int limitIndex = 0;
for (int i = 0; i < N; i++) {
for (int j = limitIndex; j < M; j++) {
int testLength = testSpeedArr[i][0];
int testSpeed = testSpeedArr[i][1];
int limitLength = limitSpeedArr[j][0];
int limitSpeed = limitSpeedArr[j][1];
overSpeed = Math.max(testSpeed - limitSpeed, overSpeed);
if (testLength < limitLength ){
limitSpeedArr[j][0] -= testSpeedArr[i][0];
break;
}
if (testLength > limitLength) {
testSpeedArr[i][0] -= limitSpeedArr[j][0];
limitIndex++;
}
if (testLength == limitLength) {
limitIndex++;
break;
}
}
}
System.out.println(overSpeed);
}
}
'Algorithm > 소프티어' 카테고리의 다른 글
[Softeer] 바이러스 - JAVA (0) | 2023.08.03 |
---|---|
[Softeer] 회의실 예약 - JAVA (0) | 2023.08.03 |
[Softeer] 비밀 메뉴 - JAVA (0) | 2023.08.03 |
[Softeer] 지도 자동 구축 - JAVA (0) | 2023.08.03 |
[Softeer] 장애물 인식 프로그램 - JAVA (0) | 2023.08.02 |