[LeetCode] 1823. Find the Winner of the Circular Game

정성훈·2021년 7월 31일
0

풀이

맨처음에는 배열에 특정값으로 삭제된 값들을 표기해서 답을 구하려고 하였다.
하지만 뭔가 수학적인 공식으로 해결할 수 있을 것 같아서 여러 방법들을 살펴보았다
수학적인 공식은 아니지만, 큐를 이용해 좀 더 심플하게 해결가능하였다.

코드

/**
 * @param {number} n
 * @param {number} k
 * @return {number}
 */
var findTheWinner = function(n, k) {
    // 배열로 초기화
    const arr = []
    for(let i=0; i<n; i+=1){
        arr.push(i+1)
    }
    // 큐를 이용하여 풀이한다.
    // n에 1개가 남을때 까지 무한반복한다.
    while(arr.length !== 1){
        // 맨앞요소를 빼서 맨뒤로 보내준다.
        // 이걸 k-1번 반복함
        for(let i=0; i<k-1; i+=1){
            const first = arr.shift();
            arr.push(first)
        }
        // 맨앞에 남은걸 제거
        arr.shift();
    }

    // 1개남은게 정답
    return arr[0];
};

정리

다른 사람 풀이 방법도 찾아보면서 공부해야 내 실력이 늘 것 같다.

출처

https://leetcode.com/problems/find-the-winner-of-the-circular-game/
https://www.youtube.com/watch?v=V5CyomTb-94

profile
Frontend 개발자 입니다.

0개의 댓글