반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 파이썬 평범한배낭
- MongoDB
- 소프티어 장애물인식프로그램
- CRUD
- 금고털이 파이썬
- 백준 전쟁 파이썬
- 소프티어 지도자동구축
- 백준 등수매기기
- 프로그래머스
- express mongodb
- 백준 바이러스
- jenkins
- 백준 A->B
- 백준 예산
- MySQL완전삭제
- 백준 전쟁-전투
- 파이썬데이터분석라이브러리
- 장애물인식프로그램 파이썬
- 백준 점프 파이썬
- 백준 점프
- 1987파이썬
- 등수매기기 파이썬
- 백준 피아노체조
- 백준알파벳파이썬
- express
- 지도자동구축 파이썬
- 피아노체조 파이썬
- 백준 평범한배낭
- 도커 컨테이너
- 백준
Archives
- Today
- Total
바위 뚫는중
[BOJ] 백준 2979. 트럭주차 본문
반응형
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사이 이다.
출력
첫째 줄에 상근이가 내야하는 주차 요금을 출력한다.
풀이
브론즈 2가 이렇게 어렵다니^^,, 나의 생각의 한계에 봉착한 기분이었다. 역시 구현이 가장 까다로운 것 같다.
1대 2대 3대 뿐이고, 로직은 아주 간단하다
각 차가 있는 시간을 +1해준다
각 배열의 숫자가 1일때 2일때 3일때 각각 A, B, C를 곱해주면 된다.
(가장 먼저 들어온 시간과 늦게 나가는 시간 그 사이만큼의 배열만 검사!! → Math.min, Math.max 이용)
package 백준2979_트럭주차;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
//한대, 두대, 세대에 해당하는 요금 입력 받기
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
int C = Integer.parseInt(st.nextToken());
int[] arr = new int[100]; // 입력 들어오는거 100 이하
int start, end = 0;
int first_start = 0;
int last_end = 0;
//시간을 차례로 입력 받기
for (int i= 0 ; i < 3; i++) {
st = new StringTokenizer(br.readLine());
start = Integer.parseInt(st.nextToken()); // 시작 시간
end = Integer.parseInt(st.nextToken()); // 끝나는 시간
first_start = Math.min(first_start, start); // 가장 빨리 시작하는 것 구하기
last_end = Math.max(last_end, end); // 가장 늦게 끝나는 시간 것 구하기
//트럭 한대의 start와 end시간만큼 배열을 더해준다. 현재 배열은 100까지 있다
for (int j = start; j < end; j ++) {
arr[j]++; //한 트럭당 시작부터 끝까지 +1 해주기
}
}
int sum =0;
//가장 처음 들어온 시간 부터 가장 마지막 시간 까지 계속 계산
for(int i = first_start; i < last_end; i++) {
if(arr[i] == 1) {
sum += A*arr[i];
} else if(arr[i] == 2) {
sum += B*arr[i];
} else if (arr[i] == 3) {
sum += C*arr[i];
}
}
System.out.println(sum);
}
}
반응형
'Algorithms > 백준' 카테고리의 다른 글
[BOJ] 백준 9461. 파도반 수열, DP (0) | 2023.09.02 |
---|---|
[BOJ] 백준 10814. 나이순 정렬, Comparator (0) | 2023.09.02 |
[BOJ] 백준 10709. 기상캐스터 (0) | 2023.08.27 |
[BOJ] 백준 1157. 단어 공부 (2) | 2023.08.27 |
[BOJ] 백준 11724. 연결요소 개수 구하기 (0) | 2023.07.20 |