👀 문제 설명
로그인해야 문제를 볼 수 있다
✍🏻풀이
이 문제는 앞에서부터 접근하면 시간 초과가 날 수 있는 문제이다.
뒤에서부터 접근하면서 가장 큰 값을 max_budget에 넣는다.
현재 값이 max_budget보다 작으면 max_budget - 현재값을 ans에 더해가며 답을 구하면 된다.
코드
#include <stdio.h>
#include <iostream>
using namespace std;
int num[1000002] = { 0, };
int main(int argc, char** argv) {
int T;
cin >> T;
for (int i = 0; i < T; i++) {
int N;
long long ans = 0;
cin >> N;
for (int j = 0; j < N; j++) {
cin >> num[j];
}
int max_budget = num[N - 1];
for (int j = N - 1; j >= 0; j--) {
if (max_budget >= num[j]) {
ans += (max_budget - num[j]);
}
else {
max_budget = num[j];
}
}
cout << "#" << i + 1 << " " << ans << endl;
for (int j = 0; j < N; j++) {
num[j] = 0;
}
}
return 0;
}
'숨막히는 알고말고 > 문제 풀이' 카테고리의 다른 글
[Baekjoon] 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 (for문 사용) (0) | 2021.01.26 |
---|---|
[SWEA] 조교의 성적 매기기(Difficulty 2) (0) | 2021.01.21 |
[SWEA] 중간 평균값 구하기(Difficulty 2) (0) | 2021.01.18 |
[SWEA] 연월일 달력(Difficulty 2) (0) | 2021.01.16 |
[Baekjoon] iSharp (0) | 2021.01.14 |