https://www.acmicpc.net/problem/2852
#include <iostream>
#include <string>
using namespace std;
int n, t, A, B;
string times, temp;
int sumA, sumB;
string ChangeIntToString(int data)
{
string sTemp{};
string s = to_string(data % 60);
string m = to_string(data / 60);
if (s.size() == 1)
s = "0" + s;
if (m.size() == 1)
m = "0" + m;
sTemp = m + ':' + s;
return sTemp;
}
int ChangeStringToInt(string data)
{
int nTemp = stoi(data.substr(3, 2));
nTemp += stoi(data.substr(0, 2)) * 60;
return nTemp;
}
int WinTime(string dst, string src)
{
return ChangeStringToInt(src) - ChangeStringToInt(dst);
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> t >> times;
if (A > B)
sumA += WinTime(temp, times);
else if (A < B)
sumB += WinTime(temp, times);
if (t == 1)
A++;
else
B++;
temp = times;
}
int temps = WinTime(temp, "48:00");
if (A > B)
sumA += temps;
else if (A < B)
sumB += temps;
cout << ChangeIntToString(sumA) << endl;
cout << ChangeIntToString(sumB) << endl;
}
- 득점을 한 팀이 다른 팀이 득점을 하기 전까지 이기고있던 시간을 구하는 문제
- t가 1인지 2인지 판단해 A,B를 ++해 어느팀이 득점을 했는지 채크해주고 temp 변수에 현재 시간을 저장해준다
- 처음 입력시 걸리지 않았던 조건문 A>B , B<A가 두번째 입력부터는 판단하게 될것인데 이를 판단해 현재 득점 시간과 저번 득점 시간을 비교해 나온 값을 sumA나 sumB에 누적해 더해준다
- 이렇게 하면 마지막 득점 시간까지 A,B팀이 앞서나가고 있던 시간을 구할 수 있다
- 마지막으로 for문을 탈출할 때 저장된 temp 변수와 종료 시간인 48:00을 WinTime 함수에 넘겨주어 종료 직전 이기고 있던 시간을 구해주고 A>B,A<B인지 판단해 sumA,sumB중에 좀전에 종료 직전에 이기고있던 시간을 더해준다
- 이제 sumA와 sumB를 분과 초 형태로 변환하여 string에 저장한 후 출력해주면 된다
'코딩 태스트 > 문제풀이' 카테고리의 다른 글
연구소(x) (0) | 2025.01.12 |
---|---|
괄호 (0) | 2025.01.12 |
영화감독 숌(x) (0) | 2025.01.10 |
교수가 된 현우(x) (0) | 2025.01.10 |
기상 캐스터 (0) | 2025.01.10 |