[백준 / 2979 / C++] 트럭 주차

Park·2023년 9월 18일
0

코딩테스트 - Week1

목록 보기
3/15

1. 문제 접근

  • 자동차 3대가 얼마나 같이 주차되어있느냐를 카운팅 배열로 접근해서, [도착 시간, 출발 시간) 범위를 카운트해줘야 함

2. 시행착오

  1. 시간 문제를 다룰 때는(도착/출발, 시작/끝나는시간) 무조건 이상, 미만 구간을 적용해야 한다.
  • ex. 도착시간:1 / 출발시간:3 => 실제 시간은 2이다.
  • 따라서 [1, 3) 이렇게 해야 한다.
  1. end 변수 잘못 활용
  • end()std라이브러리에서 사용되는,iterator return할 때 사용됨
  • 따라서 사용하면 안된다. => endend_t로 바꿈

3. 코드 및 풀이

3.1 배열을 활용한 풀이

  • 따라서 다음과 같이 카운팅 배열을 활용해서 구하면 된다.
  • 마지막에 100을 포함하지 않는 것도, 입력이 100까지만 들어오고, 시간 문제 특성 상 출발시간은 count되지 않기에 제외가 가능
#include <bits/stdc++.h>
using namespace std;

int arr[101];

int a, b, c;
int start_t, end_t;
int sum = 0;

// count cars
void countCars(int start_t, int end_t){
    for(int i = start_t; i < end_t; i++) {
        arr[i]++;
    } 
    return;
}
    
int main(){

	// 1. input cost
    cin >> a >> b >> c;
    
    // 2. input 3 cars time and count
    for(int i = 0; i < 3; i++){
        cin >> start_t >> end_t;
        countCars(start_t, end_t);
    }
    
    // 3. sum of cost
    for(int i = 1; i < 100; i++){
        if(arr[i] == 1) sum += a;
        else if(arr[i] == 2) sum += 2 * b;
        else if(arr[i] == 3) sum += 3 * c;
    }

    cout << sum;

}

Reference

profile
안녕하세요!

0개의 댓글