https://www.acmicpc.net/problem/11501
11501번: 주식
입력의 첫 줄에는 테스트케이스 수를 나타내는 자연수 T가 주어진다. 각 테스트케이스 별로 첫 줄에는 날의 수를 나타내는 자연수 N(2 ≤ N ≤ 1,000,000)이 주어지고, 둘째 줄에는 날 별 주가를 나타
www.acmicpc.net
이 문제는 배열의 뒷부분부터 계산을 하면 된다.
예를 들어 1 1 3 1 2 이라는 예제가 있을 때 최댓값을 마지막 인덱스인 2로 두고 배열의 뒷 부분부터 2보다 큰 숫자가 나올 때까지 2에서 그 사이의 배열의 값을 빼준다.
즉
2 - 1 = 1
3 - 1 = 2
3 - 1 =2 해서 5 라는 값이 출력되는 것이다. 왼쪽 수는 최댓값을 의미하는 max 변수로 두고 코드를 작성하면 된다.
▶코드
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;
int T = Integer.parseInt(br.readLine());
int arr[][] = new int[T][];
long cnt = 0;
for (int i = 0; i < T; i++) {
int N = Integer.parseInt(br.readLine());
arr[i] = new int[N];
st = new StringTokenizer(br.readLine());
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
int max = 0;
int index = 0;
for (int i = 0; i < T; i++) {
cnt=0;
max = arr[i][arr[i].length - 1];
for (int j = arr[i].length - 2; j >= 0; j--) {
if(arr[i][j]>max){
max = arr[i][j];
}
else {
cnt += max - arr[i][j];
}
}
System.out.println(cnt);
}
}
}
'알고리즘 > 백준 풀이(그리디)' 카테고리의 다른 글
백준 1213번 - 팰린드롬 만들기 (1) | 2024.02.05 |
---|---|
백준 1105번 - 팔 (0) | 2024.02.03 |
백준 2847번 - 게임을 만든 동준이 (1) | 2024.02.03 |
백준 1449번 - 수리공 항승 (1) | 2024.01.31 |
백준 1439번 - 뒤집기 (0) | 2024.01.26 |