https://www.acmicpc.net/problem/2852
2852번: NBA 농구
첫째 줄에 골이 들어간 횟수 N(1<=N<=100)이 주어진다. 둘째 줄부터 N개의 줄에 득점 정보가 주어진다. 득점 정보는 득점한 팀의 번호와 득점한 시간으로 이루어져 있다. 팀 번호는 1 또는 2이다. 득
www.acmicpc.net
저는 구현을 통해 문제를 해결하였습니다.
골을 넣으면 해당 스코어를 증가시키고, 다음 골의 시간과의 차이 만큼 해당 팀에 시간을 추가해 주어 문제를 해결하였습니다. 구현의 편의성을 위해 0~n까지 for문을 돌리고 , n일때는 마지막 시간인 48분이 되도록 하여 풀었습니다.
package BOJ.etc;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.function.Function;
public class BOJ_2852 {
private static final int LAST_TIME = 60 * 48;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Function<String,Integer> stoi = Integer::parseInt;
int n = stoi.apply(br.readLine());
int[] score = new int[3];
int[] totalTime = new int[3];
int prevTime = 0;
for(int i = 0 ; i <= n ; i++){
int min = LAST_TIME;
int team = 1;
if(i != n){
StringTokenizer st = new StringTokenizer(br.readLine());
team = stoi.apply(st.nextToken());
String time = st.nextToken();
min = 60 * stoi.apply(time.split(":")[0]);
min += stoi.apply(time.split(":")[1]);
}
if(score[1] < score[2]){
totalTime[2] += min - prevTime;
}
if(score[1] > score[2]){
totalTime[1] += min - prevTime;
}
score[team]++;
prevTime = min;
}
System.out.println(minToString(totalTime[1]));
System.out.println(minToString(totalTime[2]));
}
private static String minToString(int time){
StringBuilder sb = new StringBuilder();
int hour = time / 60;
if(hour < 10){
sb.append("0");
}
sb.append(hour+":");
int min = time % 60;
if(min < 10){
sb.append("0");
}
sb.append(min);
return sb.toString();
}
}
'알고리즘' 카테고리의 다른 글
프로그래머스 세 개의 구분자 (JAVA) (1) | 2023.10.14 |
---|---|
프로그래머스 x 사이의 개수 (JAVA) (0) | 2023.10.13 |
백준 14495번 피보나치 비스무리한 수열 (JAVA) (1) | 2023.10.11 |
백준 14497번 주난의 난 (JAVA) (1) | 2023.10.10 |
백준 29703번 펭귄의 하루 (JAVA) (1) | 2023.10.09 |