[알고리즘] 2852번: NBA 농구
2023. 9. 16. 00:53ㆍAlgorithm/with C++
0. 문제
1. 문제 이해
- 득점이 발생한다.
- 동점인지 확인한다.
- 동점이면 prevTime을 현재 시간으로 갱신한다.
- 동점이 아니면 높은 스코어의 팀에 시간을 추가하고, prevTime을 현재 시간으로 갱신한다.
- 득점한 팀의 스코어를 올린다.
- 마지막에 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;
}
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;
}
만약 MM
이나 SS
가 한 자리 수라면 앞에 0
을 붙이는 방법이다.
일정한 포맷을 구현하는 방법이니 기억해 둘 것.
항상 시작은 문제의 규칙성을 찾고 검증하기 위해서
직접 손으로 적어보자.
'Algorithm > with C++' 카테고리의 다른 글
[알고리즘] 9012번: 괄호 (0) | 2023.09.26 |
---|---|
[알고리즘] 1436번: 영화감독 숍 (0) | 2023.09.26 |
[알고리즘] 3474번: 교수가 된 현우 (0) | 2023.09.16 |
[알고리즘] 10709번: 기상캐스트 (0) | 2023.09.10 |
[알고리즘] 2870번: 수학숙제 (0) | 2023.09.06 |