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