[백준/BOJ] 백준 17521번 : Byte Coin

2020. 11. 6. 01:29알고리즘 문제풀이

www.acmicpc.net/problem/17521

 

17521번: Byte Coin

입력은 표준입력을 사용한다. 첫 번째 줄에 요일 수를 나타내는 양의 정수 n과 초기 현금 W(1 ≤ n ≤ 15, 1 ≤ W ≤ 100,000)가 주어진다. 다음 n 개의 줄에서, i번째 줄은 i일의 바이트 코인 가격을 나

www.acmicpc.net

처음일 때, 마지막일 때, 중간지점일 때의 상황을 고려하여 코인을 사고파는 선택을 한다.

 

코드

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main()
{
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);

	int n;
	long long w;
	long long b_coin = 0;
	vector<int> s(15, 0);
	int input;

	cin >> n >> w;

	for (int i = 0; i < n; i++)
	{
		cin >> input;
		s[i] = input;
	}

	for (int i = 0; i < n; i++)
	{
		//처음일때
		if (i == 0)
		{
			if (s[i] <= s[i + 1])
			{
				if (w != 0)
				{
					//살수있는 코인을 모두 산다
					b_coin += w / s[i];
					w = w % s[i];
				}
			}
		}

		//마지막 일때
		else if (i == n - 1)
		{
			if (s[i - 1] <= s[i])
			{
				if (b_coin != 0)
				{
					//가지고 있는 코인을 모두 판다
					w += b_coin * s[i];
					b_coin = 0;
				}
			}
		}

		else
		{
			//이전에 내려오다가 다음에 올라가는 지점일때
			if (s[i - 1] >= s[i] && s[i] < s[i + 1])
			{
				if (w != 0)
				{
					//살수 있는 코인을 모두 산다
					b_coin += w / s[i];
					w = w % s[i];
				}
			}

			//이전에 올라오다가 다음에 내려가는 지점일때
			else if (s[i - 1] <= s[i] && s[i] > s[i + 1])
			{
				if (b_coin != 0)
				{
					//팔수 있는 코인을 모두 판다
					w += b_coin * s[i];
					b_coin = 0;
				}
			}
		}
	}

	cout << w;

	return 0;
}