[swexpert] 1859. 백만장자 프로젝트 (java)
728x90
반응형
함정: 데이터 범위 초과
푸는 방법: 뒤에서 부터 돌면서 풀기
1) 풀이
3 5 9의 경우 뒤집어서 9 5 3 으로 본다
1. max_value를 갱신해나간다
2. max_value - 현재 값을 결과값으로 더해 나간다. 뒤에서부터 도는 이유는 나중에 나오는 가장 큰 값을 찾기 위해서이다.
current_value | 9 | 5 | 3 |
max_value | 9 | 9 | 9 |
diff=max_value-current_value | 0 | 4 | 6 |
답은 모든 차이값 diff를 더한 값이다.
2) 함정
n은 총 1000000로 10^6이고 각 금액의 최대값은 10000이다. 즉 모든 금액이 10000이고 n=10^6이라면
모든 값을 다 더한 결과값이 최대 10^4*10^6 = 10^10 로 메모리가 초과하게 된다.
(int의 크기는 최대 2^16-1, 대략 2^10 = 10^3으로 계산)
따라서 long형을 써준다. 여기서는 diff만 long형이 되면 된다.
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int t=sc.nextInt();
for (int i = 0; i < t; i++) {
int n=sc.nextInt();
long diff=0;
int max_value=0;
int[] arr=new int[n];
for (int j = 0; j < n; j++) {
arr[j]=sc.nextInt();
}
for (int j = n-1; j >=0; j--) {
if(arr[j]>max_value)max_value=arr[j];
diff+=max_value-arr[j];
}
System.out.printf("#%d %d\n",i+1,diff);
}
sc.close();
}
}
728x90
반응형
'swexpert' 카테고리의 다른 글
[swexpert] 2050. 알파벳을 숫자로 (java) (0) | 2021.01.14 |
---|---|
[swexpert] 2369. B theater (java) (0) | 2021.01.13 |
[swexpert] 2058. 자릿수 더하기 (java, javascript) (0) | 2021.01.13 |
[swexpert] 2063. 중간값 찾기 (java) (0) | 2021.01.13 |
[swexpert] 2068. 최대값 구하기 (java) (0) | 2021.01.13 |
TAGS.