※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 25644번 문제인 최대 상승이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/25644
25644번: 최대 상승
미래를 예측하는 능력이 있는 정균이는 앞으로 $N$일간 ANA 회사의 주가가 어떻게 변하는지 정확히 예측할 수 있다. 정균이는 예측한 결과를 바탕으로 ANA 회사의 주식 한 주를 적당한 시점에 사고
www.acmicpc.net
이 문제에서의 주식거래는 어떤 날에 주식을 사서 그 이후(당일 포함)에 판매하는 것으로 이루어진다. 판매하는 날이 무조건 존재해야하므로 이를 기준으로 생각을 해보자. i번째 날에 주식을 한 주 팔 경우 얻을 수 있는 최대 이득은 (i번째 날의 주식의 가격) - (i-1번째 날까지의 주식의 최저가격)로 계산할 수 있다.
따라서 첫 날부터 주식의 가격을 읽어가며 (i-1번째 날까지의 주식의 최저가격)값을 관리하는 변수를 이용해 O(N)으로 문제를 해결할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int N; cin >> N;
int mn = 1000000007;
int ans = 0;
while (N--) {
int x; cin >> x;
mn = min(mn, x);
ans = max(ans, x - mn);
}
cout << ans;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 25600 // C++] Triathlon (0) | 2022.10.30 |
---|---|
[BOJ 25635 // C++] 자유 이용권 (0) | 2022.10.29 |
[BOJ 25631 // C++] 마트료시카 합치기 (0) | 2022.10.27 |
[BOJ 25643 // C++] 문자열 탑 쌓기 (0) | 2022.10.26 |
[BOJ 25642 // C++] 젓가락 게임 (0) | 2022.10.25 |