본문 바로가기
코딩테스트(알고리즘)/baekjoon

[baekjoon] 2852 NBA농구 (Javascript)

by Cafe Mocha 2023. 1. 23.

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

 

2852번: NBA 농구

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

www.acmicpc.net


알고리즘 : 구현

 

/**
 * 제출용. 아래 로컬용을 지우고 제출하자.
 */
//  let input = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n")
/**
 * 로컬용, 예제.txt를 생성해서 예제를 복붙하자.
 */
let input = require("fs")
  .readFileSync("input.txt") //"/dev/stdin"
  .toString()
  .split("\n")
  .map((val) => val.trim());

function solution() {
  // 농구는 48분간 진행
  // 각 팀이 몇분간 이기고 있었는지 표시

  let t = +input.shift();

  let aScore = 0;
  let bScore = 0;
  let aTime = 0;
  let bTime = 0;
  let cur = 0;
  let team1 = [0,0];
  let team2 = [0,0];


  while(t--){
      let temp = input.shift().split(" ");

      let team = +temp.shift();
      let [m,s] = temp.shift().split(":").map(v=>+v);
      
      const time = (+m * 60) + (+s);
      
      if(aScore > bScore) {
          aTime += time - cur;
      } else if (aScore < bScore) {
          bTime += time - cur;
      }
      
      if(team === 1) {
          aScore++;
      } else {
          bScore++;
      }
      
      cur = time;
    }

    if(aScore > bScore) {
      aTime += 48 * 60 - cur;
  } else if(aScore < bScore) {
      bTime +=  48 * 60 - cur;
  } 

  team1[0] = Math.floor(aTime / 60);
  team1[1] = aTime % 60;
  team2[0] = Math.floor(bTime / 60);
  team2[1] = bTime % 60;

  team1 = team1.map(v=>String(v).padStart(2,'0')).join(":");
  team2 = team2.map(v=>String(v).padStart(2,'0')).join(":");

  console.log(team1);
  console.log(team2);
}
solution();