반응형
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
- 동적계획법
- 무료코딩강의
- dfs
- 알고리즘
- 무료개발강의
- java
- 백준단계별로풀어보기
- 자바
- 알고리즘공부
- 백준자바
- 백트래킹
- Java개념
- 백준9단계
- 다이나믹 프로그래밍
- dp
- ★
- 자바의정석연습문제풀이
- 자바공부
- 시간 복잡도
- 자바개념
- 코딩공부
- 자바의정석
- 빅오 표기법
- 백준
- BFS
- ☆
- 개발공부
- 백준알고리즘
- 브루트포스
- 자바의정석연습문제
Archives
- Today
- Total
더 많이 실패하기
공부 102일차: 백준 11399번 ATM 자바 java 본문
반응형
11399 ATM
https://www.acmicpc.net/problem/11399
11399번: ATM
첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000)
www.acmicpc.net
백준 11399번 문제 ATM
문제
과정 생각해보기
우선 문제를 그림으로 이해해보려 한다
그림에 색깔별로 표시한 것처럼, 앞선 사람을 기다린 시간을 모두 더하고 기기 이용을 끝마친 시간까지 더한다
주어진 시간을 중첩하면서 더하는 구조인 것
어차피 뒤로 갈수록 각자의 시간을 모두 더한 수이므로, 앞에 있는 숫자가 작을수록 시간은 작아진다
따라서 걸리는 시간에 따라 오름차순으로 돈을 인출하는 것이 가장 짧을 것이다
시간을 줄이려면 카운팅정렬이 가장 좋겠지만,
문제에서 요구하는 숫자의 범위가 매우 좁으므로 간단하게 Arrays.sort()를 사용해도 될 듯하다
정답 인정 코드
1)
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
32
33
34
35
36
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] arr = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr); // 최소 시간을 구하기 위한 오름차순 정렬
int sum = 0;
int[] tmp = new int[n];
for(int i = 0; i < n; i++) {
for(int j = 0; j <= i; j++) {
tmp[i] += arr[j]; //빈 배열 tmp에 i까지의 합 넣기
}
}
for(int i = 0; i < n; i++) {
sum += tmp[i];
}
System.out.println(sum);
}
}
|
cs |
위에 적은 과정을 매우 친절하게 풀어 쓴 코드
반복문이 상당히 많이 나온다
2)
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
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] arr = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr); // 최소 시간을 구하기 위한 오름차순 정렬
int sum = 0;
int totalSum = 0;
for(int i = 0; i < n; i++) {
sum += arr[i];
totalSum += sum;
}
System.out.println(totalSum);
}
}
|
cs |
배열 대신 그냥 정수 변수를 사용하여 작성한 코드
반복문을 매우 많이 줄였다
쉬운 문제들이 연달아 나왔다
반응형
'알고리즘 > 백준' 카테고리의 다른 글
공부 104일차: 백준 2738번 행렬 덧셈 자바 java (0) | 2022.11.11 |
---|---|
공부 103일차: 백준 1541번 잃어버린 괄호 자바 java (0) | 2022.11.10 |
공부 101일차: 백준 11047번 동전 0 자바 java (0) | 2022.11.08 |
공부 100일차: 백준 11437번 LCA 자바 java ☆실패 (0) | 2022.11.07 |
공부 99일차: 백준 12871번 무한 문자열 자바 java (0) | 2022.11.06 |
Comments