728x90
https://www.acmicpc.net/problem/11501
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int cnt = Integer.parseInt(br.readLine());
for (int tCase=0; tCase<cnt; tCase++) {
//입력받기 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
int day = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
List<Integer> list = new ArrayList<>();
for (int i=0; i<day; i++)
list.add(Integer.parseInt(st.nextToken()));
//입력끝 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
long result = 0;
int maxValue = list.get(day-1);
for (int i=day-1; i>=0; i--) {
int value = list.get(i);
if (value >= maxValue)
maxValue = value; //매도지점
else
result += (maxValue - value); //매수(이익 계산)
}
System.out.println(result);
}
}
}
(자바는 입력받는 코드가 너무 긴 것 같다)
- 리스트 뒤에서부터 하나씩 빼면서 매도해야할 지, 매수해야할 지 결정한다
- 리스트 맨 뒷 값을 maxValue로 잡고, 앞으로 가면서 값을 비교한다
- 자기보다 값이 작으면 이익을 계산해 result에 더하고(maxvalue지점에서 매도한다고 생각)
- 자기보다 값이 같거나 크면 새로운 매도지점으로 잡는다(이 때는 매수해도 이익이 나지 않음)
계속 틀린 이유
- 이 출력 조건을 보지 못해서 result를 int로 잡고 했더나 계속 2% 밑에서 틀렸다고 나왔다. 다음엔 출력조건을 더 자세해 봐야겠다.
728x90