#1. 문제
문제
상근이는 트럭을 총 세 대 가지고 있다. 오늘은 트럭을 주차하는데 비용이 얼마나 필요한지 알아보려고 한다.
상근이가 이용하는 주차장은 주차하는 트럭의 수에 따라서 주차 요금을 할인해 준다.
트럭을 한 대 주차할 때는 1분에 한 대당 A원을 내야 한다. 두 대를 주차할 때는 1분에 한 대당 B원, 세 대를 주차할 때는 1분에 한 대당 C원을 내야 한다.
A, B, C가 주어지고, 상근이의 트럭이 주차장에 주차된 시간이 주어졌을 때, 주차 요금으로 얼마를 내야 하는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 문제에서 설명한 주차 요금 A, B, C가 주어진다. (1 ≤ C ≤ B ≤ A ≤ 100)
다음 세 개 줄에는 두 정수가 주어진다. 이 정수는 상근이가 가지고 있는 트럭이 주차장에 도착한 시간과 주차장에서 떠난 시간이다. 도착한 시간은 항상 떠난 시간보다 앞선다. 입력으로 주어지는 시간은 1과 100사이 이다.
#2. 사고과정
[처음] 각 시간대에 필요한 배열을 길이만큼 생성 하였다. 그리고 그 집합의 교집합을 찾으려고 접근했다. 그래서 시간도 엄청 오래걸렸고 메모리도 엄청 많이 사용했다. 제대로된 풀이 과정은 아래서 보자.
#3. 코드
#include<bits/stdc++.h>
using namespace std;
int A, B, C, a, b, c, cnt[101], ret;
int main(){
cin >> A >> B >> C;
for ( int i = 0 ; i < 3; i++){
cin >> a >> b;
for( int j = a ; j < b ; j++ ){
cnt[j]++;
}
}
for ( int i = 0 ; i < 100; i++){
if(cnt[i] == 1) ret += A;
if(cnt[i] == 2) ret += B*2;
if(cnt[i] == 3) ret += C*3;
}
cout << ret;
return 0;
}
#4. 풀이
코드에는 필요한 변수들만 선언되어있다.
1. 필요 변수 선언 int A,B,C,a,b,c,cnt[], result.
2. 입력값 A,B,C의 가격을 받는다.
3. a,b의 시간도 입력받는다. 받는 즉시 시간 배열의 인덱스로 체크하여 1을 증가 시킨다.
4. 시간 배열의 값이 1이면 Result에 A를 계속 더하고 배열의 값이 2이면 result에 B에 곱하기 2를 한다. 3이면 C에 곱하기 3을 해서 더한다.
이렇게 하는 이유는 A는 한대일때 가격 B는 두대일 때 가격 C는 세대일 때 가격이기 때문이다.
'about. What I learned > about.Algorithm' 카테고리의 다른 글
[백준 2559] 수열풀기(프썸이를 사용하자) (0) | 2022.07.18 |
---|---|
[백준 10988] 팰린드롬인지 확인하기 (0) | 2022.07.14 |
[백준 10808] 알파벳 숫자 세기 (0) | 2022.07.11 |
[백준 2309] 일곱난장이 문제(브루트 포스) (0) | 2022.07.11 |
지하철을 운행하기(from 선생님) (0) | 2021.04.01 |