[LeetCode] Time Needed to Buy Tickets

준규·2022년 9월 15일
0

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을 해보니

정답이었다!

profile
안녕하세요 :)

0개의 댓글