넘치게 채우기

[LeetCode] 2073. Time Needed to Buy Tickets 본문

PS/LeetCode

[LeetCode] 2073. Time Needed to Buy Tickets

riveroverflow 2024. 4. 9. 14:16
728x90
반응형

https://leetcode.com/problems/time-needed-to-buy-tickets/description/

LeetCode - Time Needed to Buy Tickets

문제 유형 : 큐

문제 난이도 : Easy

 

문제

There are n people in a line queuing to buy tickets, where the 0th person is at the front of the line and the (n - 1)th person is at the back of the line.

You are given a 0-indexed integer array tickets of length n where the number of tickets that the ith person would like to buy is tickets[i].

Each person takes exactly 1 second to buy a ticket. A person can only buy 1 ticket at a time and has to go back to the end of the line (which happens instantaneously) in order to buy more tickets. If a person does not have any tickets left to buy, the person will leave the line.

Return the time taken for the person at position (0-indexed) to finish buying tickets.

 

n명의 사람들이 티켓을 구매하기 위해 줄을 섰다.

0번째가 맨 처음, n-1번째가 맨 뒤이다.

 

tickets배열이 주어진다. tickets[i]에는 i번째 사람이 사려고 하는 티켓의 수를 나타낸다.

줄의 맨 앞사람은 티켓을 사고, 또 사려면 줄의 맨 뒤로 가야 한다.

k인덱스의 사람이 티켓을 다 구하는데 걸리는 시간을 구하시오.

 

풀이

처음부터 끝까지 순차적으로 티켓을 구매시키면서 카운트하면 된다.

만약 k인덱스의 사람이 티켓을 다 구하면, 끝내면 된다.

다른 다 구한사람은, 다음 차례로 넘기는 식으로 하면 된다.

큐를 이용해도 되고, 배열을 순차적으로 돌아도 된다.

 

코드

C++

class Solution {
public:
    int timeRequiredToBuy(vector<int>& tickets, int k) {
        int time = 0;
        int n = tickets.size();
        while(tickets[k] > 0) {
            for(int i = 0; i < n; i++) {
                if(tickets[i] <= 0) continue;
                tickets[i]--;
                time++;

                if(i == k && tickets[k] <= 0) break;
            }
        }

        return time;
    }
};
728x90
반응형