하루루카
루카의 개발 일지
하루루카
전체 방문자
오늘
어제
  • 분류 전체보기 (61)
    • React (10)
    • vue.js (5)
    • javascript (6)
    • 자격증 (5)
    • 기타 (7)
    • 코딩테스트 (11)
    • 프론트 CS (15)
    • NodeJs (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • GithubActions
  • 11655
  • 기술면접
  • codedeploy
  • nextjs
  • CI/CD
  • AWS
  • nodejs
  • node
  • vuetify
  • jest
  • react
  • VUE
  • express
  • 프론트엔드
  • 자바스크립트
  • vuex
  • 백준
  • socket
  • 코딩테스트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
하루루카

루카의 개발 일지

코딩테스트

백준 2979 트럭주차(C++)

2022. 11. 13. 15:20

* 해당 문제 풀이는 '큰돌'님의 문제풀이에서 제가 이해한 부분을 재작성한것입니다

 

백준 2979번 트럭주차 입니다

 

문제 해석

이 문제는 해석하는데 조금 어려웠습니다

우선 상근이는 트럭을 총 세대는 가지고 있고, 상근이가 이용하는 주차장은 주차하는 트럭의 수에 따라서 주차 요금을 할인 해줍니다

즉 1대 주차할때 한대당 A원, 2대 주차할때 한대당 B원, 3대 주차 할때 한대당 C원이 요금을 내야됩니다

 

예제를 보게되면

우선 각 A,B,C원에 대한 정수값이 입력이 되고, 그다음주에 상근이가 트럭을 주차하고 도착한 시간과 주차장에서 떠난 시간이 입력 이 되는것입니다

 

여기서 중요한 것은 시간입니다

우선 처음 시간이 1~6이 입력이 됩니다 즉 1분 에서 5분까지 트럭이 한대가 있었고, 그다음은 3분 에서 4분까지 또 트럭이 한대, 2분에서 7분까지 트럭이 한대가 있었다는 예제입니다

 

여기서 중요한 개념은 시각(시간) 이라는 개념은 이상-미만 즉 a는 포함이되지만 b는 포함되지 않는 범위로 생각을 해주어야 합니다

이를 토대로 각 시간별로 주차되어있는 트럭 갯수와 갯수에 따른 비용을 계산 하면 아래와 같이 나오고 총합은 33이 나오게됩니다

1분 : 1대 -> 총5원

2분 : 2대 -> 총6원

3분 : 3대 -> 총3원

4분 : 3대 -> 총3원

5분 : 2대 -> 총6원

6분 : 1대 -> 총5원

7분 : 1대 -> 총5원

8분 : 0대 -> 총0원

 

문제 풀이 순서

1. 요금인 A,B,C변수, 시간 범위 변수인 a,b, 트럭갯수를 세는 배열(카운팅배열), 그리고 최종 결과 변수를 선업합니다

2. 우선 A,B,C변수에 요금을 입력받습니다

3. 이후 반복문을 3번을 돌려 각 반복문 마다 시간 범위를 입력받습니다

4. 이때 입력받은 시간범위를 이상-미만 개념으로 해서 다시 중첩 반복문을돌려 트럭갯수를 세는 배열(카운팅배열)에 해당하는 인덱스를 +1를 해줍니다

5. 3번의 반복문이 모두 끝나면, 카운팅 배열을 순회합니다

6. 카운팅 배열을 순회하면서 트럭 갯수가 있는지 체크하고, 각 트럭 갯수에 따른 한대당 요금을 최종 결과 변수에 더해줍니다

 

작성 코드

#include <bits/stdc++.h>
using namespace std;

//카운팅배열, 분당 몇대의 트럭이 와있는지
int A,B,C,a,b,cnt[104],ret;
int main(){

    cin >> A >> B >> C;
    for(int i = 0; i < 3; i++){
        cin >> a >> b;

        //a는 포함되어있고 b는 포함되어있지않은 (이상-미만)
        for(int j = a; j < b; j++)cnt[j]++;
    }
    for(int j = 1; j < 100; j++){
        if(cnt[j]){
            //트럭 한대당 비용 계산
            if(cnt[j] == 1) ret += A;
            else if(cnt[j] == 2) ret += B * 2;
            else if(cnt[j] == 3) ret += C * 3;
        }
    }
    cout << ret << "\n";

    return 0;
}

 

 

 

'코딩테스트' 카테고리의 다른 글

백준 9375 패션왕 신해빈(C++)  (1) 2022.11.20
백준 1620 나는야 포멧몬 마스터 이다솜(C++)  (1) 2022.11.19
백준 2559 수열(C++)  (0) 2022.11.17
백준 1159 농구 경기(C++)  (0) 2022.11.14
백준 2309 일곱난쟁이 (C++)  (0) 2022.11.12
    '코딩테스트' 카테고리의 다른 글
    • 백준 1620 나는야 포멧몬 마스터 이다솜(C++)
    • 백준 2559 수열(C++)
    • 백준 1159 농구 경기(C++)
    • 백준 2309 일곱난쟁이 (C++)
    하루루카
    하루루카

    티스토리툴바