개발 공부 기록
[SWEA 1859번 /JAVA] 백만 장자 프로젝트 본문
Question
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LrsUaDxcDFAXc
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
💡 Solution
가장 먼저 든 생각은 배열에서 최댓값을 찾아 '최댓값 - 그 전에 있는 값'을 누적하여 결과를 도출하려 했습니다.
이때 뒤에서부터 최댓값을 찾으면 더 효율적으로 답을 찾을 수 있습니다.
이때 조심해야할 부분은 N의 최댓값 1,000,000(10^6)이고 각각의 매매가의 최댓값은 10,000(10^4)이므로, 만일 N이 10^6이고 모든 날의 매매가가 10^4이라면 결괏값은 최대 10^10이 나옵니다. int형은 대략 10^3까지 지원하므로 결괏값이 될 profit을 long형으로 선언해줍니다.
💻 Code
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class SWEA1859 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for(int i = 0; i < T; i++) {
int N = Integer.parseInt(br.readLine());
long profit = 0;
int max = 0;
int[] price = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine()," ");
for(int j = 0; j < N; j ++) {
price[j] = Integer.parseInt(st.nextToken());
}
for(int j = N - 1; j >= 0; j--) {
if(price[j] > max) {
max = price[j];
}
profit += max - price[j];
}
System.out.printf("#%d %d\n", i + 1, profit);
}
}
}
'PS > Implement' 카테고리의 다른 글
[SWEA 1966번 /JAVA] 숫자를 정렬하자 (0) | 2023.10.18 |
---|---|
[SWEA 1204번 /JAVA] 최빈수 구하기 (0) | 2023.10.17 |
[SWEA 2005번 /JAVA] 파스칼의 삼각형 (0) | 2023.10.12 |
[SWEA 2007번 /JAVA] 패턴 마디의 길이 (0) | 2023.10.12 |
[SWEA 1926번 /JAVA] 간단한 369게임 (0) | 2023.10.11 |