본문 바로가기

백준/C++

[Baekjoon/C++] 3226번 - 전화 요금

[백준] Baekjoon Online Judge

문제로 이동

 

문제

7:00부터 19:00까지 전화 요금은 1분에 10원이다.

19:00부터 7:00까지 전화 요금은 1분에 5원이다.

상근이가 전화를 건 시간과 통화 시간이 모두 주어졌을 때, 전화 요금을 구하는 프로그램을 작성하시오.

 

입력

첫째 줄에 상근이가 건 전화의 수 N이 주어진다. (1 ≤ N ≤ 100)

다음 N개 줄에는 상근이가 건 전화에 대한 정보가 HH:MM DD와 같은 형식으로 주어진다.

HH:MM은 전화를 건 시간이며, DD는 통화 시간이다. DD는 최대 60이며, MM과 DD사이에는 공백이 하나 주어진다.

만약 시나 분이 한자리 숫자라면, 앞에 0이 하나 주어진다.

시간은 00:00부터 23:59까지이다.

 

출력

총 전화 요금을 출력한다.

 


풀이

#include <iostream>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    
    int N, cost = 0;;
    cin >> N;

    while (N--) {
        string s;
        int n;
        cin >> s >> n;

        int time = (s[0] - '0') * 600 + (s[1] - '0') * 60 + (s[3] - '0') * 10 + (s[4] - '0');

        while (n--) {
            if (420 <= time && time < 1140) cost += 10;
            else cost += 5;

            time++;

            if (time == 1440) time = 0;
        }
    }

    cout << cost << '\n';

    return 0;
}

 

int time = (s[0] - '0') * 600 + (s[1] - '0') * 60 + (s[3] - '0') * 10 + (s[4] - '0');

 입력 받은 전화를 건 시간을 분으로 계산하였다.

 

        while (n--) {
            if (420 <= time && time < 1140) cost += 10;
            else cost += 5;

            time++;

            if (time == 1440) time = 0;
        }

 위에서 계산한 분에 통화 시간을 1씩 더하면서 요금을 계산하는 부분의 코드이다. 문제에서 주어진 조건에 따라 cost에 더해지는 요금이 달라진다. 수를 계속 더하다가 time이 23:59을 넘어가면 0으로 초기화해준다.