백준 2979 트럭주차

이상민·2023년 10월 8일
0

알고리즘

목록 보기
67/128
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Truck_Parking {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int[] fee = new int[3];// 주차요금 배열
        for (int i = 0; i < 3; i++) {
            fee[i] = Integer.parseInt(st.nextToken());
         }
        int[][] time = new int[3][2]; //A,B,C 각각 시작 시간, 끝 시간 담는 배열

        for (int i = 0; i < 3; i++) {
            st = new StringTokenizer(br.readLine());
            for (int j = 0; j < 2; j++) {
                time[i][j] = Integer.parseInt(st.nextToken());
            }
        }
        int count = 0; //차량 개수
        boolean[] start = new boolean[3];
        boolean[] end = new boolean[3];
        int sum =0;
        for (int i = 1; i <= 100; i++) {// 시간
            for (int j = 0; j < 3; j++) {

                if(!start[j] && time[j][0]<=i){// 시작시간이면 count 증가
                    count++;
                    start[j] = true;
                }
                if(!end[j]&&time[j][1]<=i){ //끝시간이면 count 감소
                    count--;
                    end[j] = true;
                }
            }
            if(count==1){ //매 초마다 요금 계산
                sum += fee[0]*count;
            }
            else if(count==2){
                sum += fee[1]*count;
            }
            else if(count==3){
                sum += fee[2]*count;
            }
            if(end[0]&&end[1]&&end[2]){// 차량 3대 다 끝시간 지나면 출력
                System.out.println(sum);
                return;
            }
        }


    }
}

풀이 방법

시간을 1초씩 증가하며, 매초마다 현재 주차된 차량을 세고, 그에따른 요금을 sum에 더해준다.

  1. 시간을 1초씩 증가하며, 초마다 각 차량이 주차되어 있는지 확인한다.
  2. 시작시간이 지났으면, 해당 차량이 주차된것으로 간주한다. count증가
  3. 끝 시간이 지나면 해당 차량이 빠져나간 것으로 간주한다. count감소
  4. 매초마다 주차된 차량을 확인하여 조건에 따라 요금을 정산한다.
  5. 모든 차량이 빠져나가면 sum을 출력한다.

후기

낮은 티어의 문제인데, 생각보다 어려웠다.
계산조건이 간단해서 그렇지, 탐색하는 방법을 설계하는것이 쉽지 않았다

profile
개린이

0개의 댓글