728x90
반응형
- 문제
동혁이는 NBA 농구 경기를 즐겨 본다. 동혁이는 골이 들어갈 때 마다 골이 들어간 시간과 팀을 적는 이상한 취미를 가지고 있다.
농구 경기는 정확히 48분동안 진행된다. 각 팀이 몇 분동안 이기고 있었는지 출력하는 프로그램을 작성하시오.
- 입력
첫째 줄에 골이 들어간 횟수 N(1<=N<=100)이 주어진다. 둘째 줄부터 N개의 줄에 득점 정보가 주어진다. 득점 정보는 득점한 팀의 번호와 득점한 시간으로 이루어져 있다. 팀 번호는 1 또는 2이다. 득점한 시간은 MM:SS(분:초) 형식이며, 분과 초가 한자리 일 경우 첫째자리가 0이다. 분은 0보다 크거나 같고, 47보다 작거나 같으며, 초는 0보다 크거나 같고, 59보다 작거나 같다. 득점 시간이 겹치는 경우는 없다.
- 출력
첫째 줄에 1번 팀이 이기고 있던 시간, 둘째 줄에 2번 팀이 이기고 있던 시간을 출력한다. 시간은 입력과 같은 형식(MM:SS)으로 출력한다.
- 예제 입력
1
1 20:00
3
1 01:10
2 21:10
2 31:30
5
1 01:10
1 02:20
2 45:30
2 46:40
2 47:50
- 예제 출력
28:00
00:00
20:00
16:30
45:30
00:10
- 접근방식
prev를 사용해 이전값을 알기, 시와 분 또는 분과 초가 나오면 하나의 단위로 통일후, 단위 나누기
문자열로 입력받아서 ":" 을 기준으로 앞과 뒤를 나누어 저장
- 코드
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int n, o, A, B, asum, bsum;
string s , _prev;
string print(int a) // 앞에 00을 붙이고 뒤에서 2개를 자름, 7이면 007 -> 두개를 자르니깐 07이 됨
{
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) // 입력받은 문자열 ??:?? 를 int형으로 바꾸기 단위는 초
{
return atoi(a.substr(0, 2).c_str()) * 60 + atoi(a.substr(3, 2).c_str());
}
void sumint(int& sum, string s) // int로 바꾸어 합치기
{
sum += (changetoint(s) - changetoint(_prev));
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> o >> s;
if (A > B)
sumint(asum, s);
else if (B > A)
sumint(bsum, s);
o == 1 ? A++ : B++; // o가 1이면 A팀이 이기고 있음 아니면(2면) B팀이 이기고 있음
_prev = s;
}
if (A > B)
sumint(asum, "48:00"); // 끝 점 처리를 하기
else if (B > A)
sumint(bsum, "48:00");
cout << print(asum) << "\n";
cout << print(bsum) << "\n";
return 0;
}
728x90
반응형
'C++ > BOJ' 카테고리의 다른 글
[C++]/백준 9012번 괄호 (0) | 2023.01.19 |
---|---|
[C++]/백준 1436 영화감독 숌 (0) | 2023.01.19 |
[C++]/백준 3474번 교수가 된 현우 (0) | 2023.01.19 |
[C++]/백준 10709번 기상캐스터 (0) | 2023.01.19 |
[C++]/백준 2870번 수학숙제 (0) | 2023.01.17 |