[백준]nba농구
백준 온라인 저지
NBA 농구
링크 : 문제 바로가기
import java.util.Scanner;
class TimeCheck {
static String timeTerm(String oldTime, String newTime) {// 두개의 시간 차이를 구해주는 메서드 작성
int oldMinute = Integer.parseInt(oldTime.substring(0, 2));
int oldSecond = Integer.parseInt(oldTime.substring(3));
int newMinute = Integer.parseInt(newTime.substring(0, 2));
int newSecond = Integer.parseInt(newTime.substring(3));
int a;
int b;
// if (newTime=="32:12") {
// return Integer.toString(Integer.parseInt(newTime.substring(0, 2)))+" "+Integer.toString(Integer.parseInt(newTime.substring(4)));
// }
if (newSecond - oldSecond >= 0) {
a = newMinute - oldMinute;
b = newSecond - oldSecond;
} else {
a = newMinute - oldMinute - 1;
b = 60 - (oldSecond - newSecond);
}
String finalA;
String finalB;
if (a<10) {
finalA="0"+Integer.toString(a);
}else {
finalA=Integer.toString(a);
}
if(b<10) {
finalB="0"+Integer.toString(b);
}else {
finalB=Integer.toString(b);
}
return finalA + ":" + finalB;
}
static String timeSum(String oldTime, String newTime) { // 누적시간을 더해주는 메서드 작성
int oldMinute = Integer.parseInt(oldTime.substring(0, 2));
int oldSecond = Integer.parseInt(oldTime.substring(3));
int newMinute = Integer.parseInt(newTime.substring(0, 2));
int newSecond = Integer.parseInt(newTime.substring(3));
int a;
int b;
if (newSecond + oldSecond >= 60) {
a = newMinute + oldMinute + 1;
b = newSecond + oldSecond - 60;
} else {
a = newMinute + oldMinute;
b = oldSecond + newSecond;
}
String finalA;
String finalB;
if (a<10) {
finalA="0"+Integer.toString(a);
}else {
finalA=Integer.toString(a);
}
if(b<10) {
finalB="0"+Integer.toString(b);
}else {
finalB=Integer.toString(b);
}
return finalA + ":" + finalB;
}
}
public class Main {
public static void main(String[] args) {
int team1 = 0;
int team2 = 0;
int winningTeam;
int newWinningTeam=0;
String winningTime;
String result1 = "00:00";
String result2 = "00:00";
String startTime;
String realStartTime="99:99";
String endTime;
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for (; n > 0; n=n-1) {
if (team1>team2) {// 득점 전 이기고있는팀이 어딘지 확인
winningTeam=1;
}else if(team2>team1) {
winningTeam=2;
}else {
winningTeam=0;
}
int scoreTeam = sc.nextInt();// 득점 팀
startTime = sc.next(); // 득점 시간
if (realStartTime.equals("99:99")){ // realStartTime이 "00:00"으로초기화되어 있으면
realStartTime=startTime; // realStartTime=startTime으로 갱신
}
if (scoreTeam == 1) { // 득점 적용
// System.out.println("득점팀"+scoreTeam+" "+startTime);
team1 += 1;
} else {// scoreTeam==2
// System.out.println("득점팀"+scoreTeam+" "+startTime);
team2 += 1;
}
if (team1>team2) {// 득점 이후 이기고있는팀이 어딘지 확인
newWinningTeam=1;
}else if(team2>team1) {
newWinningTeam=2;
}else {
newWinningTeam=0;
}
if (winningTeam==0) {// 득점 전 무승부였다 한팀이 우위를 점하게 됨
}else if(winningTeam==newWinningTeam) {// 승부가 그대로 유지
endTime = startTime;
winningTime = TimeCheck.timeTerm(realStartTime, endTime);
realStartTime=startTime;
if(winningTeam==1) {
result1 = TimeCheck.timeSum(result1, winningTime);
}else {
result2 = TimeCheck.timeSum(result2, winningTime);
}
}else{// 득점 전 어느 한팀이 우위를 점하다 무승부가 됨 //realStartTime
endTime = startTime;
winningTime = TimeCheck.timeTerm(realStartTime, endTime);
realStartTime="99:99";
if(winningTeam==1) { //원래 우위를 점하던 팀이 1팀인 경우
result1 = TimeCheck.timeSum(result1, winningTime);
}else { //원래 우위를 점하던 팀이 2팀인 경우
result2 = TimeCheck.timeSum(result2, winningTime);
}
}
// System.out.println(scoreTeam+" "+startTime+" "+"result1 : "+result1+" result2 : "+result2+" realStartTime : "+realStartTime+" winningTeam : "+winningTeam+" newWinningTeam"+newWinningTeam);
}
// System.out.println("for문종료");
// System.out.println(realStartTime);
winningTime = TimeCheck.timeTerm(realStartTime, "48:00");
// System.out.println(winningTime);
if(newWinningTeam==1) {
result1 = TimeCheck.timeSum(result1, winningTime);
}else if(newWinningTeam==2){
result2 = TimeCheck.timeSum(result2, winningTime);
}
System.out.println(result1);
System.out.println(result2);
}
}
입력형태를 보면 처음 입력들어온 횟수를 정수로 표현하고, 그 다음부터 득점한 팀을 정수로 표현하고 득점시간을 문자열로 표현했다. 이때 문자열로 들어온 시간을 이용해 시간계산을 해야했으므로 ‘TimeCheck’이라는 클래스를 생성하고 파라미터로 문자열 시간 두개를 받으면 두 시간 차를 구해주는 timeTerm메서드, 두 시간 합을 구해주는 timeSum메서드를 만들었다.
전체 로직은 처음 입력들어온 횟수만큼 for문을 이용해 누적시간 변수를 생성하고 조건에 맞으면 누적시간에 시간을 추가하고, 조건에 맞지 않으면 넘어감을 반복하다 for문이 종료되면 경기종료시간 48:00을 이용해서 조건에 따라 누적시간을 수정해준다.
알고리즘 : 구현,문자열