Coding Game - STOCK EXCHANGE LOSSES (최대 손실 구하기)

A Code AM·2020년 3월 25일
0

Algorithm

목록 보기
3/9

주식 가격 변동 개수 n을 입력받고
주식 가격을 순서에 따라 v1 ~ vn까지 차례대로 입력받는다

어떤 시점(t0)에서 주식을 사고 다른 시점(t1)에서 주식을 판다면
손실 금액은 주식 가격 차(t1 - t0)이다. 손실이 없으면 0임

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;
int main()
{
	int n;
	int h = 0, l = 0, loss = 0;
	cin >> n; cin.ignore();
	for (int i = 0; i < n; i++) 
	{
		int v;
		cin >> v; cin.ignore();
		
		if (i == 0)
		{
			h = l = v;
		}
		else if (i > 0)
		{
			if (v - h < loss) loss = v - h;
			if (h < v)
			{
				
				h = v;
				
			}
			if (v < l)
			{
				l = v;
				if (i == n - 1)
				{
					if (v - h < loss) loss = v - h;
				}
				else
				{
					if (l - h < loss)
					{
						if (abs(l - h) > abs(loss))
						{
							loss = l - h;
						}
					}
				}
			}
		}
		
	}

	cout <<loss << endl;
}

처음 생각 : 현재가는 v로 어차피 계속 입력받으니까 현재값을 최댓값, 최저값과 계속 비교하면서 최저값에서 최댓값을 뺀 값이 기존의 loss보다 크면 loss에 그 값을 저장하고 마지막에는 loss값을 반환하자

  1. 우선 계속 올라가는 그래프에선 loss 비교를 하면 안됐다 그래서 원래 밖에 있던 loss 갱신 if문을 최저값이 갱신되는 if문 안에 집어 넣었다.
  2. 마지막 Test에 걸릴건 생각치 못했다. 현재값이 최저값이 아니더라도 최댓값과의 loss 비교를 생각해야 한다. 그래서 최댓값 비교 전에 if (v - h < loss) loss = v - h;를 집어넣어줬다.
profile
배움기록

0개의 댓글