넘치게 채우기
[LeetCode] 2073. Time Needed to Buy Tickets 본문
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 k (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;
}
};
'PS > LeetCode' 카테고리의 다른 글
[LeetCode] 402. Remove K Digits (0) | 2024.04.11 |
---|---|
[LeetCode] 950. Reveal Cards In Increasing Order (0) | 2024.04.10 |
[LeetCode] 1700. Number of Students Unable to Eat Lunch (0) | 2024.04.08 |
[LeetCode] 678. Valid Parenthesis String (0) | 2024.04.07 |
[LeetCode] 1249. Minimum Remove to Make Valid Parentheses (0) | 2024.04.06 |