본문 바로가기
백준 문제풀이

핸드폰 요금 1267번

by yeni_0224 2025. 3. 14.
728x90
반응형

동호는 새악대로 T 통신사의 새 핸드폰 옴머나를 샀다. 새악대로 T 통신사는 동호에게 다음 두 가지 요금제 중 하나를 선택하라고 했다.

  1. 영식 요금제
  2. 민식 요금제

영식 요금제는 30초마다 10원씩 청구된다. 이 말은 만약 29초 또는 그 보다 적은 시간 통화를 했으면 10원이 청구된다. 만약 30초부터 59초 사이로 통화를 했으면 20원이 청구된다.

민식 요금제는 60초마다 15원씩 청구된다. 이 말은 만약 59초 또는 그 보다 적은 시간 통화를 했으면 15원이 청구된다. 만약 60초부터 119초 사이로 통화를 했으면 30원이 청구된다.

동호가 저번 달에 새악대로 T 통신사를 이용할 때 통화 시간 목록이 주어지면 어느 요금제를 사용 하는 것이 저렴한지 출력하는 프로그램을 작성하시오.

 

#include <iostream>

const int MAX_COUNT = 100; 


int main()
{
    int arr[MAX_COUNT] = {};
    int count = 0;

    std::cin >> count;

    if (count > MAX_COUNT)
    {
        std::cout << "입력 범위 초과" << std::endl;
        return 0;
    }

    int youngsikCost = 0;
    int minsikCost = 0;

    for (int i = 0; i < count; ++i)
    {
        std::cin >> arr[i]; // 스트림 방식 입력 받기
        //영식 요금 계산
        if (arr[i] / 30 == 0) youngsikCost += 10;
        else if (arr[i] / 30 < 2) youngsikCost += 20;
        else youngsikCost += (arr[i] / 30 + 1) * 10;


        //민식 요금 계산
        if (arr[i] / 60 == 0) minsikCost += 15;
        else if (arr[i] / 60 < 2) minsikCost += 30;
        else minsikCost += (arr[i] / 60 + 1) * 15;

    }

    if (youngsikCost < minsikCost)
    {
        // 민식이 비쌀때
        std::cout << "Y " << youngsikCost << std::endl;
    }
    else if (youngsikCost > minsikCost)
    {
        // 영식이 비쌀 때
        std::cout << "M " << minsikCost << std::endl;
    }
    else
    {
        // 두 요금제 요금이 같을 때
        std::cout << "Y M " << youngsikCost << std::endl;
    }
    return 0;
}

 

이렇게도 작성할 수 있고, 요금 계산식을 더 단순화 시켜서 표현할 수도 있다.

 

#include <iostream>

const int MAX_COUNT = 100; // 제한에 대한 내용이 없어서 일단 10개


int main()
{
    int arr[MAX_COUNT] = {};
    int count = 0;

    std::cin >> count;

    if (count > MAX_COUNT)
    {
        std::cout << "입력 범위 초과" << std::endl;
        return 0;
    }

    int youngsikCost = 0;
    int minsikCost = 0;

    for (int i = 0; i < count; ++i)
    {
        std::cin >> arr[i];
        //영식 요금 계산
        youngsikCost += (arr[i] / 30 + 1) * 10;


        //민식 요금 계산
       minsikCost += (arr[i] / 60 + 1) * 15;

    }
    
    if (youngsikCost < minsikCost)
    {
        // 민식이 비쌀때
        std::cout << "Y " << youngsikCost << std::endl;
    }
    else if (youngsikCost > minsikCost)
    {
        // 영식이 비쌀 때
        std::cout << "M " << minsikCost << std::endl;
    }
    else
    {
        // 두 요금제 요금이 같을 때
        std::cout << "Y M " << youngsikCost << std::endl;
    }
    return 0;
}
728x90
반응형

'백준 문제풀이' 카테고리의 다른 글

알파벳 개수 10808번  (0) 2025.03.15
A+B-3 10950번 문제 풀이  (0) 2025.03.14
사칙연산 나눗셈 A/B 1008번  (0) 2025.03.14
사칙연산 A - B 1001번  (0) 2025.03.13
사칙연산 A x B 1000번 10998번  (0) 2025.03.13