새벽코딩

[백준] [2852] NBA농구 (문자열) (JAVA) 본문

알고리즘

[백준] [2852] NBA농구 (문자열) (JAVA)

J 코딩 2023. 1. 9. 05:32
반응형

https://www.acmicpc.net/problem/2852

2852번: NBA 농구

첫째 줄에 골이 들어간 횟수 N(1<=N<=100)이 주어진다. 둘째 줄부터 N개의 줄에 득점 정보가 주어진다. 득점 정보는 득점한 팀의 번호와 득점한 시간으로 이루어져 있다. 팀 번호는 1 또는 2이다. 득

www.acmicpc.net


문제

동혁이는 NBA 농구 경기를 즐겨 본다. 동혁이는 골이 들어갈 때 마다 골이 들어간 시간과 팀을 적는 이상한 취미를 가지고 있다.

농구 경기는 정확히 48분동안 진행된다. 각 팀이 몇 분동안 이기고 있었는지 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 골이 들어간 횟수 N(1<=N<=100)이 주어진다. 둘째 줄부터 N개의 줄에 득점 정보가 주어진다. 득점 정보는 득점한 팀의 번호와 득점한 시간으로 이루어져 있다. 팀 번호는 1 또는 2이다. 득점한 시간은 MM:SS(분:초) 형식이며, 분과 초가 한자리 일 경우 첫째자리가 0이다. 분은 0보다 크거나 같고, 47보다 작거나 같으며, 초는 0보다 크거나 같고, 59보다 작거나 같다. 득점 시간이 겹치는 경우는 없다.

출력

첫째 줄에 1번 팀이 이기고 있던 시간, 둘째 줄에 2번 팀이 이기고 있던 시간을 출력한다. 시간은 입력과 같은 형식(MM:SS)으로 출력한다.

예제 입력 1 복사

1
1 20:00

예제 출력 1 복사

28:00
00:00

예제 입력 2 복사

3
1 01:10
2 21:10
2 31:30

예제 출력 2 복사

20:00
16:30

예제 입력 3 복사

5
1 01:10
1 02:20
2 45:30
2 46:40
2 47:50

예제 출력 3 복사

45:30
00:10

※ JAVA 코드 (NBA 농구)

import java.io.*;
import java.util.*;

//  NBA 농구
public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		
		// 득점 횟수
		int N = Integer.parseInt(br.readLine());
		int winTeam = 0;
		int nowScore = 0;
		int teamOneScore = 0;
		int teamTwoScore = 0;
		String time = "";
		int tmpTime = 0;
		// 득점시간을 담을 배열
		int[] teamArr = new int[N];
		int[] timeArr = new int[N];
		
		for(int i = 0; i < N; i++) {
			st = new StringTokenizer(br.readLine());
			
			winTeam = Integer.parseInt(st.nextToken());
			time = st.nextToken();
			
			teamArr[i] = winTeam;
			
			// 시간 split
			String[] tArr = time.split(":");
			
			// 분으로 변경
			int minute = Integer.parseInt(tArr[0]) * 60 + Integer.parseInt(tArr[1]);
			timeArr[i] = minute;
		}
		
		int teamFlag = teamArr[0];
		
		if(teamFlag == 1) {
			nowScore++; 
		} else {
			nowScore--;
		}
		for(int i = 1; i < N; i++) {
			tmpTime = timeArr[i] - timeArr[i-1];
			
			if(teamFlag != 0) {
				if(teamFlag == 1) {
					teamOneScore += tmpTime;
				} else {
					teamTwoScore += tmpTime;
				}
			}
			
			if(teamArr[i] == 1) {
				nowScore++; 
			} else {
				nowScore--;
			}
			
			if(nowScore > 0) {
				teamFlag = 1;
			} else if(nowScore < 0) {
				teamFlag = 2;
			} else {
				teamFlag = 0;
			}
		}
		
		if(teamFlag != 0) {
			if(teamFlag == 1) {
				teamOneScore += 2880 - timeArr[N-1];
			} else {
				teamTwoScore += 2880 - timeArr[N-1];
			}
		}
		
		String hour = "";
		String min = "";
		hour = String.valueOf(teamOneScore / 60);
		min = String.valueOf(teamOneScore % 60);
		if(hour.length() == 1) {
			hour = "0" + hour;
		}
		if(min.length() == 1) {
			min = "0" + min;
		}
		
		System.out.println(hour + ":" + min);
		
		hour = String.valueOf(teamTwoScore / 60);
		min = String.valueOf(teamTwoScore % 60);
		if(hour.length() == 1) {
			hour = "0" + hour;
		}
		if(min.length() == 1) {
			min = "0" + min;
		}
		System.out.println(hour + ":" + min);
	}
}

※ 생각정리 (NBA 농구)
NBA농구 문자열, 구현 문제를 풀기 위해서는 두가지를 기억해야했다.
1. 첫 득점 - 처음 시작 시간(00:00)은 득점 시간에 포함되지 않는다.
2. 종료 시간(48:00) - 최후 득점시간 (동점일 경우른 제외하고)을 더해준다.
 
-새벽코딩-

반응형
Comments