2852번 : NBA 농구 [C++]
NBA 농구
다국어
1 초 | 128 MB | 4372 | 1725 | 1230 | 39.385% |
문제
동혁이는 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
https://www.acmicpc.net/problem/2852
2852번: NBA 농구
첫째 줄에 골이 들어간 횟수 N(1<=N<=100)이 주어진다. 둘째 줄부터 N개의 줄에 득점 정보가 주어진다. 득점 정보는 득점한 팀의 번호와 득점한 시간으로 이루어져 있다. 팀 번호는 1 또는 2이다. 득
www.acmicpc.net
흐름
코드
#include <bits/stdc++.h>
using namespace std;
#define prev mae
int n,o, A,B,asum, bsum;
string s,prev;
string print(int a){
string d = "00" + to_string(a/60);
string e = "00" + to_string(a%60);
return d.substr(d.size()-2,2)+":"+e.substr(e.size()-2,2); //뒤에 두칸만
}
int changeToInt(string a){ //분,초 -> 초
return atoi(a.substr(0,2).c_str())*60 + atoi(a.substr(3,2).c_str());//char->int
}
void go(int &sum, string s){ //간격 구해서 더하기
sum += (changeToInt(s) - changeToInt(prev));
}
int main(){
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
//1. 입력받기
cin >> n;
for(int i=0;i<n;i++){
cin >> o >> s;
//2. 간격 더하기
if(A>B) go(asum,s);
else if (B>A) go(bsum,s);
//3. 카운트 세기
o == 1 ? A++:B++;
prev=s;
}
//끝날때의 간격 구하기
if(A>B) go(asum, "48:00");
else if (A<B) go(bsum, "48:00");
//4. 정답 출력하기
cout << print(asum) << "\n";
cout << print(bsum) << "\n";
return 0;
}
유의할 점
- 시간:초를 각각 계산하기 어려우므로 초로 통일하기
- 시간 표시할때 0을 채워넣어야하는 경우 "00"을 앞에 더하고 뒤에 2개만 출력되도록 하기
string d = "00" + to_string(a/60);
string e = "00" + to_string(a%60);
return d.substr(d.size()-2,2)+":"+e.substr(e.size()-2,2);
- 변수를 함수에서 따로 구해서 다시 가져오는 경우 &레퍼런스를 이용해 함수 인자 받기.
https://vansoft1215.tistory.com/18
[문과 코린이의 IT 기록장] C,C++ - 레퍼런스(&) (참조자, 함수 인자로 레퍼런스 받기, 참조자의 참조
1. 참조자 (reference) - C++에 새로 도입되는 새로운 개념 * C언어에서는 어떠한 변수를 가리키고 싶을 때는 반드시 포인터를 사용해야 한다. * 그렇지만 C++에서는 다른 변수나 상수를 가리키는 방법
vansoft1215.tistory.com
- 헤더파일에 이미 정의된 변수(prev)를 내가 의도한 대로 사용하기 위해서는 #define으로 정의해주기
#define prev howareyou