[백준] 2979 트럭 주차 JAVA

·2024년 3월 5일

1일1백준 -Java-

목록 보기
24/60

문제

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

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

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

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

입력

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

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

출력

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

예제 입력

5 3 1
1 6
3 5
2 8

예제 출력

33

내가 했던 풀이 방식

  1. 처음 트럭이 도착한 시간과 마지막 트럭이 떠난 시간을 찾는다.
  2. 트럭이 들어온 시간에 count를 증가시키고, 떠난 시간에 count를 감소시킨다.
  3. 현재 count 수(주차된 트럭 수)에 맞춰 주차 요금을 더해준다.

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    
        public static void main(String[] args) throws IOException {
    
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String[] price = br.readLine().split(" ");
        
        String[] first = br.readLine().split(" ");
        String[] second = br.readLine().split(" ");
        String[] third = br.readLine().split(" ");

        int count = 0;
        int start = Math.min(Math.min(Integer.parseInt(first[0]), Integer.parseInt(second[0])), Integer.parseInt(third[0]));
        int end = Math.max(Math.max(Integer.parseInt(first[1]), Integer.parseInt(second[1])), Integer.parseInt(third[1]));

        int parking_fee = 0;
        for(int i=start; i<=end; i++) {
            if(Integer.parseInt(first[0])==i) {
                count++;
            }
            if((Integer.parseInt(second[0])==i)) {
                count++;
            }
            if((Integer.parseInt(third[0])==i)) {
                count++;
            }

            if(Integer.parseInt(first[1])==i) {
                count--;
            }
            if(Integer.parseInt(second[1])==i) {
                count--;
            }
            if(Integer.parseInt(third[1])==i) {
                count--;
            }

            if(count==1) {
                parking_fee += Integer.parseInt(price[0]);
            } else if(count==2) {
                parking_fee += Integer.parseInt(price[1])*2;
            } else if(count==3) {
                parking_fee += Integer.parseInt(price[2])*3;
            }
        }

        System.out.print(parking_fee);


    }    
}

회고

코드가 되게 안 예쁘게 작성돼서 마음에 들지는 않지만, 방식만큼은 정말 간단하기 때문에 이대로 제출하게 됐다. 다른 방식으로 풀이한 걸 보니, 입력 받을 때마다 해당 시간에 주차하고 있을 때 배열의 해당 index의 값을 증가시키고 그 배열의 값을 이용해서 풀이하던데. 일단 내가 풀이한대로 하면 100 크기의 배열을 굳이 사용하지 않아도 되고 오히려 더 간단한 것 같은데....? (근데 코드는 진짜 넘 안예쁨...)

profile
Frontend🍓

0개의 댓글