https://www.acmicpc.net/problem/2852
코드설명
문자열(String) + 정렬(Sort) 을 활용합니다.
정렬을 활용합니다.
각 시간대별로 득점에 따라서 정렬을 해줍니다.
또, 이긴 구간을 구하기 위해서는 다음 구간과의 차이점이 중요합니다.
그렇기에 아래와 같이 종료지점을 잡아주었습니다.
arr.add(new int[] {99999, timeConvertToInt("48:00")});
추가로, 문자열을 시간정수형(minute기준)으로 변환하여 각 시간대별 차이를 계산해주는 timeConverting하는 함수들을 활용하여 시간의 차이를 알아냅니다.
코드
package Main;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.StringTokenizer;
public class Main {
static int N, M, S, P, A, B, X, L, R, C, n, k, m, l, K, D, T;
static int answer = 0;
static ArrayList<int[]> arr = new ArrayList<int[]>();
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
arr.add(new int[] {99999, timeConvertToInt("48:00")});
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
int team = Integer.parseInt(st.nextToken());
String time = st.nextToken();
arr.add(new int[] {team, timeConvertToInt(time)});
}
Collections.sort(arr, new Comparator<int[]>() {
@Override
public int compare(int[] a, int[] b) {
return Integer.compare(a[1], b[1]);
}
});
int[] teamWinTime = new int[2];
int teamScore = 0;
for(int i=0; i<N; i++) {
int[] now = arr.get(i);
int[] next = arr.get(i+1);
teamScore += (now[0] == 1) ? 1 : -1;
if(teamScore > 0) {
teamWinTime[0] += next[1] - now[1];
}else if(teamScore < 0){
teamWinTime[1] += next[1] - now[1];
}
}
System.out.println(intConvertToTime(teamWinTime[0]));
System.out.println(intConvertToTime(teamWinTime[1]));
}
static int timeConvertToInt(String s) {
String[] split = s.split("[:]");
int hour = Integer.parseInt(split[0]) * 60;
int minute = Integer.parseInt(split[1]);
return hour + minute;
}
static String intConvertToTime(int time){
int hour = time / 60;
int minute = time % 60;
String ret = String.format("%02d:%02d", hour,minute);
return ret;
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 11899 괄호 끼워넣기 - 스택(Stack) JAVA (0) | 2024.10.09 |
---|---|
[백준] 3568 iSharp - 문자열(String) + 파싱(Parsing) JAVA (0) | 2024.10.08 |
[백준] 3187 양치기 꿍 - BFS(넓이우선탐색) JAVA (0) | 2024.10.04 |
[백준] 3184 양 - BFS(넓이우선탐색) JAVA (0) | 2024.10.04 |
[백준] 2583 영역 구하기 - BFS(넓이우선탐색) JAVA (0) | 2024.10.02 |