📖 문제
https://www.acmicpc.net/problem/2979
더보기
문제
상근이는 트럭을 총 세 대 가지고 있다. 오늘은 트럭을 주차하는데 비용이 얼마나 필요한지 알아보려고 한다.
상근이가 이용하는 주차장은 주차하는 트럭의 수에 따라서 주차 요금을 할인해 준다.
트럭을 한 대 주차할 때는 1분에 한 대당 A원을 내야 한다. 두 대를 주차할 때는 1분에 한 대당 B원, 세 대를 주차할 때는 1분에 한 대당 C원을 내야 한다.
A, B, C가 주어지고, 상근이의 트럭이 주차장에 주차된 시간이 주어졌을 때, 주차 요금으로 얼마를 내야 하는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 문제에서 설명한 주차 요금 A, B, C가 주어진다. (1 ≤ C ≤ B ≤ A ≤ 100)
다음 세 개 줄에는 두 정수가 주어진다. 이 정수는 상근이가 가지고 있는 트럭이 주차장에 도착한 시간과 주차장에서 떠난 시간이다. 도착한 시간은 항상 떠난 시간보다 앞선다. 입력으로 주어지는 시간은 1과 100사이 이다.
출력
첫째 줄에 상근이가 내야하는 주차 요금을 출력한다.
🔑 풀이
✅ parking: 주차된 시간을 저장하는 arrayList
✅ trucks: 시간대, 시간대 별로 주차된 트럭 수를 저장하는 HashMap
- A, B, C를 입력받는다.
- 각 트럭이 주차장에 들어온 시간 in와 떠난 시간 out을 입력받아 in부터 out까지 모든 수를 parking에 저장한다. (ex) in: 3, out: 6인 경우 park에 3, 4, 5 추가
- parking에 저장된 수들의 각 개수를 세어 trucks에 저장한다. (ex) 3이 두 번 나오면 trucks에 <3,2> 추가 <= 3시에 두 대의 트럭이 주차되어 있었다는 의미
- trucks의 트럭 수에 따라 요금을 계산하여 answer을 구한다
import java.util.*;
public class Main {
public static void main(String[] args) {
// 입력
Scanner scan = new Scanner(System.in);
int A = scan.nextInt();
int B = scan.nextInt();
int C = scan.nextInt();
// 주차된 시간 저장
ArrayList<Integer> parking = new ArrayList<>();
for (int i = 0; i < 3; i++) {
int in = scan.nextInt();
int out = scan.nextInt();
for (int j = in; j < out; j++) {
parking.add(j);
}
}
// 시간, 시간대 별 주차된 트럭 수 저장
HashMap<Integer, Integer> trucks = new HashMap<>();
for (int i : parking) {
if (trucks.containsKey(i))
trucks.put(i, trucks.get(i) + 1);
else
trucks.put(i, 1);
}
// 요금 계산
int answer = 0;
for (int i : trucks.keySet()) {
if (trucks.get(i) == 1)
answer += A;
else if (trucks.get(i) == 2)
answer += B * 2;
else
answer += C * 3;
}
// 정답 출력
System.out.println(answer);
}
}
'알고리즘' 카테고리의 다른 글
[백준] 2644. 촌수계산 (java) (1) | 2023.06.10 |
---|---|
[이코테] Chapter 5. DFS, BFS (java) (0) | 2023.06.08 |
[백준] 20006. 랭킹전 대기열 (java) (1) | 2023.06.05 |
[이코테] chapter 04. 구현 (java) (0) | 2023.06.04 |
[이코테] Chapter 03. 그리디 (java) (0) | 2023.05.29 |