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 |