-
[백준 2979] 트럭 주차C 프로그래밍/BOJ 2022. 8. 20. 18:12728x90
https://www.acmicpc.net/problem/2979
#include <stdio.h> int A, B, C; int time[3 + 2][2 + 2]; int truck[100 + 10]; int cost; void input(void) { scanf("%d %d %d", &A, &B, &C); for (int i = 0; i < 3; i++) { scanf("%d %d", &time[i][0], &time[i][1]); } } void get_cost(void) { for (int i = 0; i < 3; i++) { int x = time[i][0]; int y = time[i][1]; for (int j = x; j < y; j++) { //해당 시간대에 트럭이 몇 대 있었는지를 누적 truck[j] += 1; } } for (int i = 1; i <= 100; i++) { if (truck[i] == 1) cost += (truck[i] * A); else if (truck[i] == 2) cost += (truck[i] * B); else if (truck[i] == 3) cost += (truck[i] * C); } } int main(void) { input(); get_cost(); printf("%d", cost); return 0; }
브론즈이지만 아이디어가 필요했던 문제이다.
일단 "해당 시간대에 트럭이 몇 대 있는지 어떻게 알지?" 라는 생각이 들 것이다. input으로 각 트럭이 도착한 시간과 떠난 시간을 받으므로, 해당 시간에는 반드시 트럭이 주차되어 있다는 사실을 캐치해야 한다.
따라서 트럭이 주차되어 있음을 1로 표시하고, 1을 트럭이 도착한 시간과 떠난 시간이 주어질 때 마다 누적했다.
이렇게만 해 놓으면 각 시간대(truck 배열의 인덱스 i)에 몇대의 트럭(truck[i])이 주차되어 있는지 알 수 있고, if ~ else if 문으로 1대일 때 / 2대일 때 / 3대일 때를 나누어 비용을 곱해줄 수 있다.
728x90'C 프로그래밍 > BOJ' 카테고리의 다른 글
[백준 14889] 스타트와 링크 (0) 2022.08.21 [백준 2531] 회전초밥 (0) 2022.08.21 [백준 2670] 연속부분최대곱 (0) 2022.08.20 [백준 2578] 빙고 (0) 2022.08.20 [백준 2659] 십자카드 문제 (0) 2022.08.19