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