본문 바로가기

문제풀이

[매우쉬움] 1470 우유 축제

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

 

문제 풀이

문제가 단순하기에 중간즘에 읽어서도

어떻게 풀어야할지 답을 미리 정하게 될 정도로 구조가 단순하고 이해하기 쉬웠다.

이런 문제를 풀어보는 경험이 DP 알고리즘에 익숙해지는방법이라고 생각한다.

 

영학이의 규칙


  1. 맨 처음에는 딸기우유를 한 팩 마신다.
  2. 딸기우유를 한 팩 마신 후에는 초코우유를 한 팩 마신다.
  3. 초코우유를 한 팩 마신 후에는 바나나우유를 한 팩 마신다.
  4. 바나나우유를 한 팩 마신 후에는 딸기우유를 한 팩 마신다.

영학이는 우유 거리의 시작부터 끝까지 걸으면서 우유를 사먹고자 한다.

우유거리에는 사람이 많기 때문에 한 번 지나친 우유 가게에는 다시 갈 수 없다.


 

영학이는 나열된 우유가게에서 자신이 마셔야할 음료규칙에 따라 음료를 마신다.

모든 우유가게를 시작부터 끝까지 거치고 난뒤 영학이가 마신 모든 우유의 갯수를 출력한다.

 

 우선 코드를 먼저 출력하겠다.

#include <iostream>
#include <queue>
using namespace std;

int main()
{
    int count;
    int shopNum;
    int index = 0;
    int result = 0;

    queue<int> shopBuffer;
    int ruleIndex[3] {0,1,2};
    
    cin >> count;

    while (count > 0)
    {
        cin >> shopNum;
        shopBuffer.push(shopNum);
        count--;
    }


    while (shopBuffer.size() > 0)
    {
        int cur = shopBuffer.front();
        if (cur == ruleIndex[index])
        {
            index++;

            if (index > 2)
            {
                index = 0;
            }
            result++;
        }

        shopBuffer.pop();
    }

    cout << result;
}

 

queue<int> shopBuffer

우유거리에는 사람이 많기 때문에 한 번 지나친 우유 가게에는 다시 갈 수 없다.

이 의미로 우유가게가 나열된 List가 필요하다.

하지만 한번 지나친 우유 가게는 다시 갈수 없다는 의미로 나는 큐로 가게나열 정보를 받아오고

영학이가 마셔야할 음료가 아니라면 다음 나열된 가게를 지나치는구조를 생각한다.

 

 int ruleIndex[3] {0,1,2}

영학이가 우유를 마시는 규칙을 담아두었다.

0 = 딸기우유 1 = 초코우유 2 = 바나나우유

 

영학이가 현제 마셔야할 음료의 정보를 기억해둘 변수 index를 지정하고

index의 증가로 다음 마셔야할 음료의 정보를 매 새로 정의할수있게끔 생각한다.