[백준 BOJ] 5928번 Contest Timing (C++/cpp)

2025. 3. 16. 02:43PS (Program Solving)/BOJ (백준)

문제 설명

https://www.acmicpc.net/problem/5928

 

백준 BOJ 5928번 Contest Timing 문제 사진

 

접근 방법 - 기초적인 사칙연산 문제

백준의 5928번 문제는 사칙연산을 통하여 간단하게 해결할 수 있는 문제이다.

해당 문제는, 11일 11:11에 대회를 시작하여 입력받은 시간에 종료하였을 때 대회를 진행한 총시간을 분 단위로 구하여 출력하면 되는 문제이다.

해당 문제가 영어로 기재되어 있어, 필자는 아래에 있는 번역본을 참고하며 문제를 해결하였다.

아래 링크의 해석본을 참고하며 문제를 이해하고 해결을 시도해 보면 되겠다.

https://www.acmicpc.net/board/view/86039

 

필자는 개인적으로 시간 계산 문제를 싫어하는지라 살짝 헤맸던 걸로 기억한다. (...)

해당 문제를 풀 때엔, 1일이 1440분이며 1시간이 60분인 점만 잘 고려하며 코드를 작성하면 된다.

자세한 설명은 아래에 기재해 놓으니, 혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면 아래의 설명과 코드를 참고해 보길 바란다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 대회를 종료한 일, 시, 분(d, h, m)을 순차적으로 입력받는다.

 

2) 대회를 진행한 총시간을 분 단위로 저장할 변수 sum을 선언한다.

이때 필자의 경우에는, 일수에 대한 두 값의 차를 분으로 환산하여 sum의 초기값으로 우선 저장하였다.

 

3) 2)에서 저장된 sum에 대해, 시간에 대한 값을 추가로 연산해 준다.

이때 h가 11보다 큰 경우엔, sum에 저장된 값보다 초과된 시간이기 때문에 두 값을 차를 분으로 환산하여 더해주었다.

다만 h가 11보다 작은 경우엔, sum에 저장된 값에서 차감되어야 하는 시간이기 때문에 두 값의 차를 분으로 환산하여 빼주었다.

 

4) 3)과 마찬가지로, sum에 대해 분에 대한 값을 추가로 연산해 준다.

m이 11보다 큰 경우엔, sum에 저장된 값보다 초과된 분이기 때문에 두 값의 차를 그대로 더해주었다.

다만 m이 11보다 작은 경우엔, sum에 저장된 값에서 차감되어야 하는 분이기 때문에 두 값의 차를 그대로 빼주었다.

 

5) 위처럼 연산이 모두 완료되었다면, 최종적으로 저장된 sum의 값을 출력한 뒤 실행을 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#define endl '\n'
using namespace std;

//백준 5928번 코드
int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);   cout.tie(NULL);

    int d, h, m;
    cin >> d >> h >> m;

    int sum = (d - 11) * 1440;
    if (h - 11 < 0) {
        sum -= (11 - h) * 60;
    }
    else {
        sum += (h - 11) * 60;
    }
    if (m - 11 < 0) {
        sum -= (11 - m);
    }
    else {
        sum += (m - 11);
    }
    
    if (sum < 0) { sum = -1; }
    cout << sum << endl;
}

 

제출 결과

백준 BOJ 5928번 Contest Timing 문제 C++ 제출 결과

(2023.04.07 백준 5928번 문제 제출 결과)

반응형