코딩테스트/SWExpertAcademy

수도 요금 경쟁 C++(SW Expert Academy)

멍토 2020. 2. 18.

난이도 : D2

문제번호 : 1284

※ 저의 풀이가 무조건적인 정답은 아닙니다.

다른 코드가 좀더 효율적이고 좋을 수 있습니다.

다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.

문제 주소 및 출처입니다.

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV189xUaI8UCFAZN&categoryId=AV189xUaI8UCFAZN&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


목차

1. 문제 설명

2. 문제 해석

3. 소스 코드


1. 문제 설명

삼성전자에 입사한 종민이는 회사 근처로 이사를 하게 되었다.

그런데 집의 위치가 두 수도 회사 A, B 중간에 위치하기에 원하는 수도 회사를 선택할 수 있게 되었는데, 두 회사 중 더 적게 수도 요금을 부담해도 되는 회사를 고르려고 한다.
 
종민이가 알아본 결과 두 회사의 수도 요금은 한 달 동안 사용한 수도의 양에 따라 다음과 같이 정해진다.
 
A사 : 1리터당 P원의 돈을 내야 한다.

B사 : 기본 요금이 Q원이고, 월간 사용량이 R리터 이하인 경우 요금은 기본 요금만 청구된다. 하지만 R 리터보다 많은 양을 사용한 경우 초과량에 대해 1리터당 S원의 요금을 더 내야 한다.

종민이의 집에서 한 달간 사용하는 수도의 양이 W리터라고 할 때, 요금이 더 저렴한 회사를 골라 그 요금을 출력하는 프로그램을 작성하라.

입력

첫 번째 줄에 테스트 케이스의 수 T가 주어진다.

각 테스트 케이스마다 첫 번째 줄에 위 본문에서 설명한 대로 P, Q, R, S, W(1 ≤ P, Q, R, S, W ≤ 10000, 자연수)가 순서대로 공백 하나로 구분되어 주어진다.

출력

각 테스트 케이스마다 ‘#x’(x는 테스트케이스 번호를 의미하며 1부터 시작한다)를 출력하고,

종민이가 내야 하는 수도 요금을 출력한다.

예시

입력 출력
2
9 100 20 3 10
8 300 100 10 250
#1 90
#2 1800

2. 문제풀이

하나하나 분리해서 생각해보겠습니다.

1. A사와 B사중 싼걸로 해야한다.

2. A사는 사용량 * L당 요금으로 계산한다.

3. B사는 R리터 이하까지는 Q요금을 R을 넘어간다면 넘어간 만큼 리터당 S요금을 추가한다.

이것을 정리해서 작성하면 아래와 같습니다.

 


3. 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <algorithm>
using namespace std;
//수도 요금 경쟁
int main() {
    int len, p, q, r, s, w, result[2]{0};
    cin >> len;
    for (int l = 1; l <= len; l++) {
        //리터당요금, R리터 이하요금, 제한사용량, 초과분 리터당 요금, 수도 사용량
        cin >> p >> q >> r >> s >> w;
        //A사는 요금 * 사용량
        result[0= p * w;
        //R이하만큼 사용했다면 사용량은 Q
        if (w <= r)    result[1= q;
        //R초과라면 초과분만큼 추가한다.
        else    result[1= s * (w-r) + q;
        cout << "#" << l << " ";
        //둘중 작은 값을 출력한다.
        cout << min(result[0], result[1]) << endl;
    }
    return 0;
}

댓글

💲 광고입니다.