Programing/백준, 프로그래머스(C++)

[C++][백준 20546] 기적의 매매법

hye3193 2025. 1. 16. 16:21

https://www.acmicpc.net/problem/20546

 

풀이

flag 변수를 두어 가격이 전일 대비 하락/상승한 연속 일자를 기록할 수 있도록 하였다

 

제출 코드

#include <iostream>
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int j[2] = {};
    int s[2] = {};
    int cash;
    cin >> cash;
    j[0] = cash;
    s[0] = cash;

    int flag = 0;
    int prev;
    int stock;

    for (int i = 0; i < 13; i++)
    {
        cin >> stock;

        j[1] += j[0] / stock;
        j[0] = j[0] % stock;

        if (i == 0 || prev == stock)
        {
            flag = 0;
            continue;
        }
        if (prev < stock) flag = (flag > 0) ? flag + 1 : 1;
        if (prev > stock) flag = (flag < 0) ? flag - 1 : -1;
        prev = stock;

        if (flag < -2)
        {
            s[1] += s[0] / stock;
            s[0] = s[1] % stock;
        }
        else if (flag > 2)
        {
            s[0] += s[1] * stock;
            s[1] = 0;
        }
    }
    cin >> stock;
    j[0] += j[1] * stock;
    s[0] += s[1] * stock;

    cout << ((j[0] == s[0]) ? "SAMESAME" : (j[0] > s[0]) ? "BNP" : "TIMING");
}

flag 변수의 경우

1. 전일 가격 대비 오늘 가격이 같으면 0으로 초기화

2. 전일 대비 상승했는데 flag가 0보다 크다면(연속으로 상승 추이란 의미) flag + 1을 해주고, 아니라면 1으로 지정해준다

3. 전일 대비 하락한 경우도 마찬가지로 동작하도록 작성했다

 

그리고 준현과 성민의 매매에 관해서는 문제 본문을 그대로 옮겼다

성민의 거래에서 flag < -2의 의미는 3일 연속으로 하락장이란 의미이고(오늘은 그 3일째)

flag > 2의 의미는 3일 연속으로 상승장이라는 의미이다