[백준 BOJ] 10707번 수도요금 (C++/cpp)

2023. 9. 23. 17:50PS (Program Solving)/BOJ (백준)

문제 설명

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

 

10707번: 수도요금

JOI군이 살고 있는 지역에는 X사와 Y사, 두 개의 수도회사가 있다. 두 회사의 수도요금은 한 달간 수도의 사용량에 따라 다음과 같이 정해진다. X사 : 1리터당 A엔. Y사 : 기본요금은 B엔이고, 사용량

www.acmicpc.net

백준 BOJ 10707번 수도요금 문제 사진1
백준 BOJ 10707번 수도요금 문제 사진2

 

접근 방법 - 기본적인 사칙연산 구현 문제

백준의 10707번 문제는 기초적인 사칙연산을 구현하여 해결해야 하는 문제이다.

해당 문제는, 2개 수도회사의 요금 청구 방식과 한 달 수도 사용량을 참고하여 지불해야 하는 수도요금의 최솟값을 구해야 하는 문제이다.

문제에도 명시되어 있지만, 2개 회사의 수도요금 청구 방식을 여기에도 정리해 보았다.

입력값이 총 5가지가 주어지는데, 각각 의미하는 바가 다르기 때문에 문제를 잘 이해할 필요가 있어 보인다.

- X사 :: 1리터당 x엔
- Y사 :: yh리터 이하 사용했을 시, yb엔만 지불하면 된다. 다만, yh리터 초과했을 시, 초과한 1리터 당 yp엔이다.

필자는 단순하게 2가지 회사의 청구 요금을 각각 계산하고, 그중 저렴한 것을 골라 출력하게끔 하였다.

기초적인 알고리즘 능력이 갖추어져 있다면, (번거로운 감은 있겠지만) 어렵지 않게 해결할 수 있을 것이다.

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

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

 

코드의 실행 순서

1) 입력값을 저장할 변수 5가지를 각각 선언하고, 순서에 맞게 입력을 받는다.

(앞의 4가지 입력값은 위에 있는 박스 내용 의미를 연결 지어서 보길 바란다. 마지막 변수 whole은 한 달 사용량을 의미한다.)

 

2) X사의 수도요금을 저장할 변수 rx를 선언하면서, whole*x 값을 저장하도록 한다.

(X사는 무조건 1리터당 x엔을 지불해야 하는 방식이다.)

 

3) Y사의 수도요금을 저장할 변수 ry를 선언한다. 이때, ry에 저장할 값은 사용량에 따라 수행할 연산을 달리 해야 한다.

- whole 값이 yh 이하라면, 기본값만 지불하면 되기 때문에 yb 값을 그대로 저장한다.

- 다만, whole 값이 yh를 초과한다면, 기본값에 초과한 사용량에 대한 추가금도 지불해야 한다. 따라서 이 경우엔, yb에 (whole-yh)*yp를 더한 값을 저장한다.

 

4) 지불할 금액의 최솟값을 저장할 변수 min을 선언하면서, rx와 ry 중 작은 값을 저장하도록 한다.

 

5) 최종적으로 저장된 min의 값을 출력한 뒤, 실행을 종료하도록 한다.

반응형

 

성공한 코드

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

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

    int x, yb, yh, yp, whole;
    cin >> x >> yb >> yh >> yp >> whole;

    int rx = whole * x;
    int ry;
    if (whole <= yh) {
        ry = yb;
    }
    else {
        ry = yb + yp * (whole - yh);
    }

    int min = rx < ry ? rx : ry;
    cout << min << endl;
}

 

제출 결과

백준 BOJ 10707번 수도요금 문제 C++ 제출 결과

(2023.03.24 백준 10707번 문제 제출 결과)

반응형