[백준]NBA농구

신동혁·2022년 8월 12일
0

백준

목록 보기
3/11

백준 온라인 저지

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을 이용해서 조건에 따라 누적시간을 수정해준다.

알고리즘 : 구현,문자열

profile
개발취준생

0개의 댓글