문제 정보: 1983. 조교의 성적 매기기
1. 원재는 연속된 N일 동안의 물건의 매매가를 예측하여 알고 있다.
2. 당국의 감시망에 걸리지 않기 위해 하루에 최대 1만큼 구입할 수 있다.
3. 판매는 얼마든지 할 수 있다.
[입력]
첫 번째 줄에 테스트 케이스의 수 T가 주어진다.
각 테스트 케이스 별로 첫 줄에는 자연수 N(2 ≤ N ≤ 1,000,000)이 주어지고,
둘째 줄에는 각 날의 매매가를 나타내는 N개의 자연수들이 공백으로 구분되어 순서대로 주어진다.
각 날의 매매가는 10,000 이하이다.
[출력]
각 테스트 케이스마다 ‘#x’(x는 테스트 케이스 번호를 의미하며 1부터 시작한다)를 출력하고, 최대 이익을 출력한다.
[예제 풀이]
1번째 케이스는 아무것도 사지 않는 것이 최대 이익이다.
2번째 케이스는 1,2일에 각각 한 개씩 사서 세 번째 날에 두 개를 팔면 10의 이익을 얻을 수 있다.
입력 3 3 10 7 6 3 3 5 9 5 1 1 3 1 2 |
출력 #1 0 #2 10 #3 5 |
import java.text.DecimalFormat;
import java.util.Scanner;
public class solution_1859 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T, N;
T = sc.nextInt();
for(int test_case = 1; test_case <= T; test_case++) {
//세팅
N = sc.nextInt();
if(N < 2 || N > 1000000){
break;
}
double[] numArray = new double[N];
for(int i = 0; i < N; i++) {
numArray[i] = sc.nextInt();
}
//로직 처리
double result = logicProc(numArray);
//결과 소수점 없이 치환
DecimalFormat df = new DecimalFormat("#");
String StrResult = df.format(result);
System.out.println("#"+test_case +" "+ StrResult);
}
}
//로직 처리
public static double logicProc(double[] numArray){
double result = 0;
boolean isLastIndex = false;
for(int i = numArray.length-1; i > -1; i--) {
for(int j = i-1; j > -1; j--) {
if(numArray[j] >= numArray[i]) {
i = j+1;
break;
} else {
result += numArray[i] - numArray[j];
}
if(j == 0){
isLastIndex = true;
break;
}
}
if(isLastIndex){
break;
}
}
return result;
}
}
'알고리즘 > SW Expert Academy' 카테고리의 다른 글
1206. [S/W 문제해결 기본] 1일차 - View (0) | 2021.08.28 |
---|---|
1933. 간단한 N 의 약수 (0) | 2021.08.27 |
1983. 조교의 성적 매기기 (0) | 2021.08.18 |
1204. [S/W 문제해결 기본] 1일차 - 최빈수 구하기 (0) | 2021.08.05 |
1984. 중간 평균값 구하기 (0) | 2021.08.05 |