220915 1:27 ~ 1:38
카운팅 배열로 풀었음.
: 들어오는 시점부터 진행하면 안되고, 다음 시간까지의 거리차인 1분 텀이 있어야 하는
방식으로 접근해야 하기 때문에 아래의 v[i].first + 1 방식으로 넣어야 함...
for (int i = 0; i < 3; ++i)
{
// 도착시간부터 출발시간까지 사이의 값도 카운팅을 해야함.
// 주의할점 : 들어온 시간부터 하면 안됨.
// 도착해서 나갈때 까지의 텀을 계산하는 것이므로.
for (int j = v[i].first + 1; j <= v[i].second; ++j)
{
++cnt[j];
}
}
#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>
#include <string>
int main()
{
int a, b, c;
cin >> a >> b >> c;
vector<pair<int, int>>v(3);
int mmax = 0;
for (int i = 0; i < 3; ++i)
{
cin >> v[i].first >> v[i].second;
if (mmax < v[i].second)
mmax = v[i].second;
}
vector<int>cnt(mmax + 1, 0);
// 한대를 주차하면 1분당 1대에 a원
// 두대를 주차하면 1분당 1대에 b원
// 세대를 주차하면 1분당 1대에 c원을 내야 함.
// 5 3 1
// 1 2 3 4 5 6 7 8 9 10 11 12 13
// a o o
// b o o
// c o o
// 어떻게 동일한 시간대에 차가 1,2,3대가 되는지
// 시점을 알아야 함.
// => 카운팅 배열을 사용하자.
for (int i = 0; i < 3; ++i)
{
// 도착시간부터 출발시간까지 사이의 값도 카운팅을 해야함.
// 주의할점 : 들어온 시간부터 하면 안됨.
// 도착해서 나갈때 까지의 텀을 계산하는 것이므로.
for (int j = v[i].first + 1; j <= v[i].second; ++j)
{
++cnt[j];
}
}
// output
//for (int i = 0; i <= mmax; ++i)
//{
// cout << cnt[i] << " ";
//}
int res = 0;
for (int i = 0; i <= mmax; ++i)
{
if (cnt[i] == 1)
{
res += a * cnt[i];
}
else if (cnt[i] == 2)
{
res += b * cnt[i];
}
else if (cnt[i] == 3)
{
res += c * cnt[i];
}
}
cout << res;
}
도착한 시간과 떠난 시간
1번 트럭 : 1초에 도착 ~ 6초에 떠남...
2번 트런 : 3초에 도착 ~ 5초에 떠남...
3번 트럭 : 2초에 도착 ~ 8초에 떠남...
=> 카운팅을 해서 접근하면 좋을 듯함..
대충 설계를 하면...
arr[101] 으로 놓고.
arr[1] ~ arr[6 - 1] 카운팅
arr[3] ~ arr[5 - 1] 카운팅
arr[2] ~ arr[8 - 1] 카운팅
// 도착 시간 - 1로 진행해야 아다리가 맞음.
// 1대 : 5초 , 2대 : 3초 , 3대 : 1초
//arr[x] : x초부터 x + 1초까지 대기함.
arr[1] : 1 / 1대 있음. -> 1 5 = 5 // sum : 5
arr[2] : 2 / 2대 있음. -> 2 3 = 6 // sum : 11
arr[3] : 3 / 3대 있음. -> 3 1 = 3 // sum : 14
arr[4] : 3 / 3대 있음. -> 3 1 = 3 // sum :17
arr[5] : 2 / 2대 있음. -> 2 3 = 6 // sum :23
arr[6] : 1 / 1대 있음. -> 1 5 = 5 // sum :28
arr[7] : 1 / 1대 있음. -> 1 * 5 = 5 // sum :33??
arr[8] : 8초 이후로는 없음 -> 0
using namespace std;
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
int main()
{
//1대만 주차하면 : 5원
//2대 주차하면 : 3원씩
//3대 주차하면 1원씩
// 1 ~ 6
// 3 ~ 5
// 2 ~ 8
// 1 에서 2 초까지는 한대 -> 5
// 2에서 3초 까지는 두대 -> 6
// 3에서 4초 까지는 3대 -> 3
// 4에서 5초까지는 3대 -> 3
// 5초에서 6초까지는 2대 -> 6
// 6초에서 7초까지는 1대 -> 5
// 7초에서 8초까지는 1대 -> 5
// 1번. for 를 돌리면서 인덱스 카운팅을 시킴
// 2번. 총합을 구하자.
int a, b, c;
cin >> a >> b >> c;
vector<pair<int, int>>v(3);
for (int i = 0; i < 3; ++i)
{
cin >> v[i].first;
cin >> v[i].second;
}
vector<int>cost(100, 0);
for (int i = 0; i < 3; i++)
{
for (int j = v[i].first; j < v[i].second; ++j)
{
++cost[j];
}
}
int sum = 0;
// 총합 구하기
for (auto iter : cost)
{
if (iter == 3)
{
sum += iter * c;
}
else if (iter == 2)
{
sum += iter * b;
}
else if (iter == 1)
{
sum += iter * a;
}
}
cout << sum;
//test용 출력하기
//for (auto iter : cost)
//{
// cout << iter << " ";
//}
}