당니의 개발자 스토리
1-C 본문
내 풀이(http://boj.kr/37f0a909026e49a893cecd4c188bfbce) - 맞음
공유 소스 보기
www.acmicpc.net
1-C
자 백준 2979 트럭 주차 문제를 풀어 보도록 하겠습니다.

어떤 시간대에 트럭들이 이렇게 주차가 되어 있다라고 칩시다.
자 그렇게 쳤을 때,

이 구간에는 1대죠. 이런 식으로,

구간 별로 주차되어 있는 수가 다릅니다.

그래서 요금은 1대일 때 A이고, 2대일 때 B고, 3대일 때 C입니다.
그래서 총 요금의 합을 구하는 문제인데, 자 이 문제 어떻게 풀어야 될까요? 트럭이 주차된 시각이 나오죠.
그러니까 세 개의 트럭이 도착한 시간과 떠난 시간이 주어지잖아요.
자 여러분 일단 이걸 봤을 때 Counting 배열이 생각이 나셔야 됩니다.
자 2대로 예를 들어 볼게요.

이렇게 0 0 0 0 으로 되어 있는데, 트럭이 이렇게 오면 카운팅을 해서 이러한 상태값이 나오는 거죠.

그럼 이제 이걸 기반으로 해서 '아 이 시간대에는 1대구나, 이 시간대에는 2대구나' 라는 걸 알 수가 있는거에요.
그래서 이제 도착한 시간과 떠난 시간을 기반으로 해서 counting 배열을 써야된다고 감을 잡을 수가 있는 겁니다.
자 그럼 여기서 중요한 점은 뭐냐면, 기억하세요. 시간 또는 시각은 "이상", "미만"이다.

뭐뭐가 시작한 시간, 그리고 끝난 시간이라고 했을 때, 그러면 이걸 어떻게 표현할까? 이상과 미만으로 잡는 게 좋습니다.
자 이거는 코드를 보면서 제가 어떤 얘기를 하는 건지 설명을 해보도록 할게요.

자 이렇게 되어있죠. 일단 입력 값을 받아요. 그런 다음 시작 시간과 끝난 시간을 입력 받는데,

어떻게 하고 있죠? 이상과 미만으로 하고 있습니다. a는 포함되어 있고 b는 포함되어 있지 않죠. 그쵸? 이런 식으로 "이상, 미만"으로 잡으셔야 돼요.
앞으로는 도착한 시간, 떠난 시간 그리고 시작한 시간, 끝날 시간 이라고 했을 때 무조건 이상 미만으로 해야 돼요.
그리고 나서,

이 문제의 최대 범위가 100 이기 때문에 그 정도만 확인을 하면 되는 거죠. 100을 포함하지 않는 이유는 최대가 100인데, 도착시간이 100이 될 수 없기 때문입니다.

만약에 Counting이 있다면, 그러니까 트럭이 도착했다면 몇 대인지 체크하고 금액을 합산합니다.
이런 식으로 counting 배열을 이용을 해서 분당, 즉 이 시간에 해당하는 트럭이 몇 대가 와 있는지를 계산하려면, counting 배열을 써야 되고, 이 배열을 기반으로 A, B, C를 더한 것을 볼 수 있습니다.
꼭 기억하세요! counting 배열 쓰는 것과 시각은 항상 이상 미만이다.
이게 이 문제의 핵심이었습니다.
'10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트 > 알고리즘 문제풀이' 카테고리의 다른 글
| 1-E (0) | 2024.03.06 |
|---|---|
| 1-D (0) | 2024.03.06 |
| 1-B counting star (0) | 2024.03.05 |
| 1-A : 재귀함수로 푸는 방법 (0) | 2024.03.04 |
| 1-A (0) | 2024.03.04 |