n 명의 사람이 티켓을 사려고 줄을 설 때 index 0 번의 사람이 제일 앞에 서있는 사람이고 (n-1)명의 사람이 그 뒤로 줄을 서있는 상황이다
0-indexed 숫자배열 tickets 가 주어지고 i번째 사람은 tickets[i] 값 만큼 티켓을 구매한다고 한다
각 사람은 티켓을 구매할 때 한번에 한장씩만 살 수 있고 한장 구매에 1초가 걸린다고 한다.
티켓을 한장 구매하고도 더 구매해야하는 사람이면 줄의 맨뒤로 돌아가는 상황이고 티켓을 다 구매한 사람은 줄을 더이상 서지 않고 떠난다고 한다
이러한 티켓팅 상황에서 index k의 사람이 티켓을 전부 구매하는데 걸리는 시간을 구하는 문제이다
Example 을 보자
const timeRequiredToBuy = function(tickets, k) {
let time = 0;
while(tickets[k] !== 0) {
for(let i = 0; i < tickets.length; i++) {
if(tickets[i] !== 0) {
tickets[i]--;
time++
if(tickets[i] === 0 && i === k) return time;
}
}
}
return time;
};
먼저 time이라는 변수를 만들고 while문을 도는데 조건으로 tickets[k] !== 0 을 주었다
while문 안에서 for문을 도는데 만약 tickets[i] !== 0 이라면 구매할 티켓이 더 있는 것 이므로 일단 구매할 티켓수를 1 줄여주고 time을 1 증가시켜주었다.
그리고 그 후 현재 사람이 k번째 사람이고 티켓을 방금 구매하여 더이상 구매할 티켓이 없다면 그 즉시 time을 리턴하도록 해주었다
while 문이 끝난다면 k번째 사람이 마지막으로 자신의 표를 모두 구매한 것이므로 time 을 리턴해주면 된다
submit을 해보니
정답이었다!