반응형
📖 문제
https://www.acmicpc.net/problem/11501
💡 풀이 방식
• 그리디
1. 주식 시세 정보를 저장한다.
2. 주식 정보를 역방향으로 탐색하며 최대 이익 값을 갱신한다.
- Why? 오늘 이후 최대 이익을 낼 수 있는 날에 판매하기 위해
- 시간 복잡도 : O(N)
3. 구한 최대 이익 값을 결과로 출력한다.
💥 유의사항
- 앞에서부터 순방향으로 순회하며 구한다면, 시간 복잡도는 O(N^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
32
33
34
35
36
37
38
39
|
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for(int i = 0 ; i < T ; i++) {
int N = Integer.parseInt(br.readLine());
int[] arr = new int[N]; // 주식 시세 정보 저장용 배열
st = new StringTokenizer(br.readLine(), " ");
for(int j = 0 ; j < N ; j++) {
arr[j] = Integer.parseInt(st.nextToken());
}
long answer = 0; // 최대 이익 값
long max = 0;
// 주식 정보 역방향으로 탐색
for(int j = arr.length - 1 ; j >= 0 ; j--) {
if(arr[j] <= max)
answer += max - arr[j]; // 가장 비싸게 팔 수 있는 날 판매
else
max = arr[j]; // 최대 이익 값 갱신
}
// 구한 최대 이익 값 결과로 출력하기
sb.append(answer).append("\n");
}
System.out.println(sb.toString());
}
}
|
cs |
💦 어려웠던 점
- 문제 자체를 이해하지 못 했다..ㄴㅇㄱ
🧐 새로 알게 된 내용
- 뒤에서부터 역방향으로 탐색하며 정답을 구하는 것이 포인트,,
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
✔ 그림 설명 덕분에 이해가 잘 되었다... 감사를....
반응형
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 1027번: 고층 건물 (0) | 2024.09.04 |
---|---|
[백준/JAVA] 16967번: 배열 복원하기 (0) | 2024.09.03 |
[백준/JAVA] 20310번: 타노스 (0) | 2024.08.16 |
[백준/JAVA] 22233번: 가희와 키워드 (0) | 2024.08.15 |
[백준/JAVA] 1863번: 스카이라인 쉬운거 (0) | 2024.08.13 |