Game Tech Blog

2979. 트럭 주차 본문

Algorithm/백준 온라인 저지

2979. 트럭 주차

jonghow 2023. 7. 31. 14:00
반응형

[문제]

상근이는 트럭을 총 세 대 가지고 있다. 오늘은 트럭을 주차하는데 비용이 얼마나 필요한지 알아보려고 한다.

상근이가 이용하는 주차장은 주차하는 트럭의 수에 따라서 주차 요금을 할인해 준다.

트럭을 한 대 주차할 때는 1분에 한 대당 A원을 내야 한다. 두 대를 주차할 때는 1분에 한 대당 B원, 세 대를 주차할 때는 1분에 한 대당 C원을 내야 한다.

A, B, C가 주어지고, 상근이의 트럭이 주차장에 주차된 시간이 주어졌을 때, 주차 요금으로 얼마를 내야 하는지 구하는 프로그램을 작성하시오.

 

[입력]

첫째 줄에 문제에서 설명한 주차 요금 A, B, C가 주어진다. (1 ≤ C ≤ B ≤ A ≤ 100)

다음 세 개 줄에는 두 정수가 주어진다. 이 정수는 상근이가 가지고 있는 트럭이 주차장에 도착한 시간과 주차장에서 떠난 시간이다. 도착한 시간은 항상 떠난 시간보다 앞선다. 입력으로 주어지는 시간은 1과 100사이 이다.

 

[출력]

첫째 줄에 상근이가 내야하는 주차 요금을 출력한다.

 

[TC]

1.TC - Input

5 3 1
1 6
3 5
2 8

 

TC - output

33

 

2. TC - Input

10 8 6
15 30
25 50
70 80

TC - output

480

[접근]

A,B,C 트럭에 있어서 결국 들어온 점유 시간을 따짐. 

A,B,C 있을 수 있는 시간 최대는 N > 100 이기에 A,B,C 에 대한 100 개의 배열을 선언.

점유 시간일 경우 1, 아닐 경우 0

이후에 A,B,C 인덱스를 1개 씩 읽어가며 passCount 를 증가.

1,2,3 일때의 케이스를 나워서 대수 * 비용을 곱해서 ret 에 증가 이후,

최종 출력.

 

[코드] - C++

#include <iostream>
using namespace std;

int main()
{
           int arrA[100] = { 0, };
        int arrB[100] = { 0, };
        int arrC[100] = { 0, };

        int cost[3] = { 0, };

        for (int i = 0; i < 3; ++i)
        {
            cin >> cost[i];
        }

        int start = 0;
        int end = 0;
        cin >> start;
        cin >> end;

        for (int i = 0; i < 100; ++i)
            if (i >= start && i < end)
                arrA[i] = 1;

        cin >> start;
        cin >> end;

        for (int i = 0; i < 100; ++i)
            if (i >= start && i < end)
                arrB[i] = 1;

        cin >> start;
        cin >> end;

        for (int i = 0; i < 100; ++i)
            if (i >= start && i < end)
                arrC[i] = 1;

        // 여기까지 인풋
        int ret = 0;
        int passCnt = 0;

        for (int i = 0; i < 100; ++i)
        {
            passCnt = 0;

            if (arrA[i] == 1)
                ++passCnt;
            if (arrB[i] == 1)
                ++passCnt;
            if (arrC[i] == 1)
                ++passCnt;

            if (passCnt == 0) continue;

            if (passCnt == 1)
                ret += cost[0];
            if (passCnt == 2)
                ret += (cost[1]*2);
            if (passCnt == 3)
                ret += (cost[2]*3);
        }

    cout << ret;
   
    return 0;
}

[결과 및 시도]

[후기]

문제 이해를 조금 더 빨리 했으면 5분컷 가능 문제, 결국 이 문제의 포인트는 두가지였다.

할인률은 1대당 할인률. 결국 2대라고 했고 5원에서 3원으로 대당 주차비용을 할인해주면 3 * 2(대수) 를 곱해 6원을 넣어야 한다는 것. 

 

그리고 하나는 시간에 관련된 것은 이상 ~ 미만 으로 처리해야한다는 것, 떠난 시간 까지 주차배용을 낼 필요는 없음.

이 두가지 포인트만 잘 써먹어도 충분히 5분컷 나올 문제다.

추가로 보고있는 강의 선생님도 같은 방식으로 풀어서 기분이 좋은 문제였다.

 

반응형

'Algorithm > 백준 온라인 저지' 카테고리의 다른 글

1159.농구 경기  (0) 2023.08.02
10988.팰린드롬인지 확인하기  (0) 2023.07.31
10808. 알파벳 개수  (0) 2023.07.27
2309. 일곱 난쟁이  (0) 2023.07.26
1463번 - 1로 만들기 풀이  (0) 2020.11.25
Comments