일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 텐션 업 10기!
- SSAFY IM/A
- 모르고리즘
- 자료구조
- SSAFY 테스트
- DFS
- Have a good day :)
- 아자아자 화이팅
- 코로나 싫어요
- amazon
- 수학
- I am Korean
- Have a nice day.
- LeetCode #릿코드 #좋은 하루 되세요 #Have a nice day
- 네트워크
- SSAFY 10기 화이팅
- Java 환경 설정
- 우유가 옆으로 넘어지면 아야
- SeongSeobDang
- HAVE A GOOD DAY
- SSAFY 화이팅
- 우유가옆으로넘어지면아야
- 자고 싶다
- Hamming weight
- BFS
- DP
- 우유아야
- have a nice day
- 텐션 업 10기 화이팅
- Today
- Total
Hope Everyone Is Happy
[실버4] 11399. ATM (Java) 본문
https://www.acmicpc.net/problem/11399
11399번: ATM
첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000)
www.acmicpc.net
IM, A형 테스트 화이팅입니다~!!
※ 문제를 요약하면 아래와 같습니다.
▶ ATM기 1대 앞에 1번~N번까지 사람이 줄을 서있으며 각자 돈을 인출하는데 걸리는 시간은 P분
▶ 앞에 사람이 돈을 뽑는 시간 + 본인 돈을 뽑는 시간 == 본인이 돈을 뽑을 수 있는 시간
▶ 마지막 사람이 돈을 뽑을 때 최소 시간이 될 수 있도록 줄을 세웠을 때, 소요되는 시간 출력
ex) Person1 = 3, Person2 = 1, Person3 = 4, Person4 = 3, Person5 = 2
- 줄 = [1,2,3,4,5]
: 1번 사람은 3분만에 돈을 뽑을 수 있다. 2번 사람은 1번 사람이 돈을 뽑을 때 까지 기다려야 하기 때문에, 3+1 = 4분이 걸리게 된다. 3번 사람은 1번, 2번 사람이 돈을 뽑을 때까지 기다려야 하기 때문에, 총 3+1+4 = 8분이 필요하게 된다. 4번 사람은 3+1+4+3 = 11분, 5번 사람은 3+1+4+3+2 = 13분이 걸리게 된다. 이 경우에 각 사람이 돈을 인출하는데 필요한 시간의 합은 3+4+8+11+13 = 39분
- 줄 = [2, 5, 1, 4, 3] ( 최소 시간 )
: 2번 사람은 1분만에, 5번 사람은 1+2 = 3분, 1번 사람은 1+2+3 = 6분, 4번 사람은 1+2+3+3 = 9분, 3번 사람은 1+2+3+3+4 = 13분이 걸리게 된다. 각 사람이 돈을 인출하는데 필요한 시간의 합은 1+3+6+9+13 = 32분
▶ Input : 첫줄에 사람의 수, 둘째 줄에 1번 N번까지 돈을 뽑는데 걸리는 시간(분) 입력
▶ Output : 마지막에 돈을 뽑는 사람의 최소 시간 출력
◈ Input - 1
5
3 1 4 3 2
◈ Output - 1
32
◎ 코드 작성 전, 아래와 같이 솔루션을 정리하였습니다.
▶ 1번 부터 N번까지의 시간 값을 배열로 저장
▶ 배열을 오름차순으로 정렬 (최소 시간 소요)
ex) 시작이 1분일 경우 2번째 사람 이후 부터는 1분 + 2번째 사람 시간 수 + ... 만 기다리지만,
시작이 13분일 경우 2번째 사람은 13분 + 2번째 사람 시간 수 + ... 을 확인할 수 있으며
이로 인해 오래 걸리는 사람을 제일 뒤로 보낼 경우 최소 시간이 소요되는 것을 확인할 수 있다.
▶ 정렬된 배열을 누적합하여 마지막 누적합 결과 출력
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bWriter = new BufferedWriter(new OutputStreamWriter(System.out));
int nPeople = Integer.parseInt(bReader.readLine());
int[] narrTimes = new int[nPeople];
StringTokenizer st = new StringTokenizer(bReader.readLine());
for(int i = 0; i < nPeople; i++)
narrTimes[i] = Integer.parseInt(st.nextToken());
Arrays.sort(narrTimes);
for(int i =0 ; i < nPeople-1; i++) {
narrTimes[i+1] += narrTimes[i];
}
int nSum = 0;
for(int i = 0; i < nPeople;i++)
nSum += narrTimes[i];
bWriter.write(String.valueOf(nSum));
bWriter.flush();
bWriter.close();
}
}
읽어주셔서 감사합니다!
Good Luck! (피드백 감사합니다!)
'※ 백준 (Baekjoon) > [Java] 문제 풀이 ( Solve the problems)' 카테고리의 다른 글
[실버3] 2108. 통계학 (Java) (0) | 2023.08.28 |
---|---|
[브론즈1] 10163. 색종이 (Java) (0) | 2023.08.27 |
[실버5] 2941. 크로아티아 알파벳 (Java) (0) | 2023.08.27 |
[실버4] 2567. 색종이 - 2 (Java) (0) | 2023.08.24 |
[실버1] 2527. 직사각형 (Java) (0) | 2023.08.23 |