BOJ 2852 : NBA 농구

·2023년 3월 17일
0

알고리즘 문제 풀이

목록 보기
81/165
post-thumbnail

풀이 요약

구현

풀이 상세

  1. 이전의 시간 값을 저장해두었다가 조건을 만족하는 경우, 이전 시간 값을 참조하여 현재 변화를 업데이트한다.

  2. 시간적인 부분은 모두 초로 바꾸어 계산하였다. 이후 다시 시간을 반환할 때는 60으로 나누어 몫을 시간으로 나머지를 초로 만들어주면 된다.

배운점

  • 출력을 다시 초에서 시간으로 바꾸어주는데 애를 먹었는데, printf() 라는 매우 좋은 방법이 있었다.
#include <iostream>
#include <vector>
#include <string>

using namespace std;
int N, A = 0, B = 0, A_win = 0, B_win = 0;;

vector<string> split(string str, string deli) {
    vector<string> ret;
    int pos = 0;
    while ((pos = str.find(deli)) != string::npos) {
        ret.push_back(str.substr(0, pos));
        str.erase(0, pos + deli.length());
    }
    ret.push_back(str);
    return ret;
}

void solve() {
    cin >> N;
    int team;
    string time;

    int prev_time = 0;
    for (int i = 0; i < N; i++) {
        cin >> team >> time;
        vector<string> temp = split(time, ":");
        int curr_time = stoi(temp[0]) * 60 + stoi(temp[1]);
        if (A > B) {
            A_win += curr_time - prev_time;
        } else if (A < B) {
            B_win += curr_time - prev_time;
        }
        team == 1 ? A++ : B++;
        prev_time = curr_time;
    }
    if (A > B) {
        A_win += 48 * 60 - prev_time;
    } else if (B > A) {
        B_win += 48 * 60 - prev_time;
    }

//    string result_A_min =
//            to_string(A_win / 60) == "0" ? "00" : A_win / 60 < 10 ? ("0" + to_string(A_win / 60)) : to_string(
//                    A_win / 60);
//    string result_B_min =
//            to_string(B_win / 60) == "0" ? "00" : B_win / 60 < 10 ? ("0" + to_string(B_win / 60)) : to_string(
//                    B_win / 60);
//    string result_A_sec =
//            to_string(A_win % 60) == "0" ? "00" : A_win % 60 < 10 ? ("0" + to_string(A_win % 60)) : to_string(
//                    A_win % 60);
//    string result_B_sec =
//            to_string(B_win % 60) == "0" ? "00" : B_win % 60 < 10 ? ("0" + to_string(B_win % 60)) : to_string(
//                    B_win % 60);
//    string result_A = result_A_min + ":" + result_A_sec;
//    string result_B = result_B_min + ":" + result_B_sec;
//    cout << result_A << "\n" << result_B;
    printf("%02d:%02d\n", A_win / 60, A_win % 60);
    printf("%02d:%02d", B_win / 60, B_win % 60);
}

int main() {
    solve();
}
profile
새로운 것에 관심이 많고, 프로젝트 설계 및 최적화를 좋아합니다.

0개의 댓글