[알고리즘] 2852번: NBA 농구

0. 문제

2852번: NBA 농구


1. 문제 이해

  1. 득점이 발생한다.
  2. 동점인지 확인한다.
    1. 동점이면 prevTime을 현재 시간으로 갱신한다.
    2. 동점이 아니면 높은 스코어의 팀에 시간을 추가하고, prevTime을 현재 시간으로 갱신한다.
  3. 득점한 팀의 스코어를 올린다.
  4. 마지막에 48:00에 2번을 추가적으로 수행한다.

2. 제출

// 백준 2852번: NBA 농구
#include<iostream>
#include<string>
#include<cstdlib>
using namespace std;

int N, score1=0, score2=0, t1=0, t2=0, prevTime=0, now=0;

string print(int sec){
  string ret="", MM="00", SS="00";

  MM+= to_string(sec/60);
  SS+= to_string(sec%60);

  MM= MM.substr(MM.size()-2, 2);
  SS= SS.substr(SS.size()-2, 2);

  ret+=MM; ret+=":"; ret+=SS;
  return ret;
}

int parse(string MMSS){
  int MM = atoi(MMSS.substr(0,2).c_str());
  int SS = atoi(MMSS.substr(3,2).c_str());
  return (MM*60)+SS;
}

int main(){
  ios_base::sync_with_stdio(false);
  cin.tie(NULL); cout.tie(NULL);

  cin >> N;
  for(int i=0; i<N; i++){
    int tNum; string input;
    cin >> tNum >> input;
    now = parse(input);

    if(score1>score2){
      t1 += now - prevTime;
    }else if(score1<score2){
      t2 += now - prevTime;
    }
    prevTime = now;

    if(tNum==1)score1++;
    else score2++;
  }
  // 48:00 = 2880
  if(score1>score2){
    t1 += 2880 - prevTime;
  }else if(score1<score2){
    t2 += 2880 - prevTime;
  }

  cout << print(t1) << "\n";
  cout << print(t2) << "\n";

  return 0;
}
Code language: PHP (php)
  • int parse(string MMSS){…}
    : MM:SS와 같이 입력값이 주어지는 경우 하나의 단위로 통일한다. 분을 초로 변환한다.

이와 같이 여러 단위(ex. 시, 분, 초)로 주어질 경우 하나의 단위로 변환한다.

string print(int sec){
  string ret="", MM="00", SS="00";

  MM+= to_string(sec/60);
  SS+= to_string(sec%60);

  MM= MM.substr(MM.size()-2, 2);
  SS= SS.substr(SS.size()-2, 2);

  ret+=MM; ret+=":"; ret+=SS;
  return ret;
}
Code language: PHP (php)

만약 MM이나 SS가 한 자리 수라면 앞에 0을 붙이는 방법이다.

일정한 포맷을 구현하는 방법이니 기억해 둘 것.


항상 시작은 문제의 규칙성을 찾고 검증하기 위해서
직접 손으로 적어보자.

 

댓글 남기기