알고리즘

피자데이

pororo 2026. 5. 30. 13:58
정올이는 성공한 피자가게의 사장이다. (블루리본을 10개나 받았다)
오늘은 정올이가 가게를 오픈한지 10년이 되는 기념일로, 이 날을 기념하기 위해 특별한 이벤트를 열었다.
이벤트의 이름은 피자 데이(Pizza Day)!

피자 데이는 N명의 학생들을 초대하여 그들이 원하는 만큼 피자를 원없이 먹게해주는 날이다.
첫 번째 학생은 A_1 개의 조각의 피자를 먹고 싶어하고, i번째 학생은 A_i 개의 조각의 피자를 먹고 싶어한다.

정올이는 1분에 한 조각의 피자를 만들어 학생에게 준다.
각 학생들은 1번부터 N번까지 순서대로 줄을 서서 피자를 한 조각씩 받아먹는데, 피자를 더 먹고 싶다면 다시 맨 뒤로 가서 줄을 서야한다.
이 때, 각 학생들이 원하는 피자를 먹기 위해 각각 얼마나 기다려야 하는지 알아보자.

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

int main() {
    int n, b;
    cin >> n;
    queue<int> a;
    queue<int> num;
    vector<int> time(n);

    for (int i = 0; i < n; i++) {
        cin >> b;
        a.push(b);
        num.push(i);
    }

    int cnt = 0;

    while (!a.empty()) {
        cnt++;
        int temp = a.front() - 1;
        int num1 = num.front();
        a.pop();
        num.pop();

        if (temp == 0) {
            time[num1] = cnt;
        }
        else {
            a.push(temp);
            num.push(num1);
        }
    }

    for (int i = 0; i < n; i++) {
        cout << time[i] << " ";
    }

    return 0;
}

가장 먼저 입력 받은 값을 가장 먼저 출력 해야 하기 떄문에 선입선출 형식의 queue를 사용한다.

처음에 큐의 값을 입력 받은 값을 초기화하고 학생들의 번호를 i로 초기화한다.

그후 시간을 측정 하기 위해 cnt를 이용하여 1분씩 증가하기 위해 cnt를 선언한다.

그런다음 얼마나 반복 할지 모르기 때문에 while문을 이용하여 값이 비어있기 전까지 반복 한다.

그후 temp라는 변수에 가장 처음 입력 받은 값을 하나 빼고 학생 또한 초기화 한다 그후 그값을 없앤다. 

그후 if문을 이용해서 가장 첫번째 값이 0이면 피자를 전부 받은것이기 떄문에 시간을 넣어주고 아닐경우 없앤 값을 다시 초기화 하여 순환한다 그후 for문을 이용해 시간을 출력 한다.

'알고리즘' 카테고리의 다른 글

안전영역  (0) 2026.05.31
스택 수열  (0) 2026.05.31
도서관(Library 2)  (0) 2026.05.30
회의실 배정  (0) 2026.05.23
자료구조의 정의와 종류  (0) 2026.05.22