[알고리즘] 백준 2852

dlwl98·2022년 5월 22일
0

알고리즘공부

목록 보기
16/34
post-thumbnail

백준 2852번 NBA 농구

해결 과정 요약

먼저 팀1이 이기고 있던 시간과 팀2가 이기고 있던 시간을 2880초로 초기화 해준다.

int time1 = 2880;
int time2 = 2880;

골이 들어갔다면 골이 들어간 시각과 직전 골이 들어간 시각의 차를 계산해서
비기고 있는 상황이었다면 time1, time2 모두에서 차를 빼주고
팀1이 이기고 있는 상황이었다면 time2 에서 차를 빼주고
팀2가 이기고 있는 상황이었다면 time1 에서 차를 빼준다.

void cal(string s){
    int temp = 60*m + sec;
    m = stoi(s.substr(0,2));
    sec = stoi(s.substr(3,2));
    t = 60*m + sec - temp;
    
    if(team1 == team2){
        time1 -= t;
        time2 -= t;
    }
    else if(team1 > team2)
        time2 -= t;
    else
        time1 -= t;
    if(whosGoal == 1) team1++;
    else team2++;
}

cal("48:00")를 마지막에 한번 더 호출해서 경기종료 휘슬을 불어준다.

풀이

#include <bits/stdc++.h>
using namespace std;

int N,whosGoal,m,sec,t;
string s;
int team1,team2;
int time1 = 2880;
int time2 = 2880;

void cal(string s){
    int temp = 60*m + sec;
    m = stoi(s.substr(0,2));
    sec = stoi(s.substr(3,2));
    t = 60*m + sec - temp;
    
    if(team1 == team2){
        time1 -= t;
        time2 -= t;
    }
    else if(team1 > team2)
        time2 -= t;
    else
        time1 -= t;
    if(whosGoal == 1) team1++;
    else team2++;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
    
    cin >> N;
    for(int i=0; i<N; i++){
        cin >> whosGoal >> s;
        cal(s);
    }
    cal("48:00");
    
    cout << time1/600 << (time1%600)/60 << ":" << (time1/10)%6 << time1-(time1/10)*10 << "\n";
    cout << time2/600 << (time2%600)/60 << ":" << (time2/10)%6 << time2-(time2/10)*10 << "\n";
}

코멘트

문자열에서 원하는 항목 추출, 요구대로 출력을 할 수 있는지 물어보는 문제.
농구경기의 진행을 생각하며 직관적으로 코드를 짜 보았다.

0개의 댓글