본문 바로가기
TIL

[코테연습] 1823. Find the Winner of the Circular Game

by 크라00 2024. 6. 22.

 

https://leetcode.com/problems/find-the-winner-of-the-circular-game/description/

 

- 스택 / 큐 문제

- k 번째에 해당하는 element 를 삭제하는 문제

 

- 문제 풀이

  1. Queue 선언

  2. n 에 해당하는 element 를 반복문으로 queue 에 초기화

  3. queue 의 사이즈가 1보다 클때까지 계속 반복하는 while 문 사용

  4. int count 변수를 1로 초기화하여 k 번째 인지 여부를 counting 한다.

  5. k 번째 일 경우에는 queue 에 요소를 담지 않고 넘어가고, count 를 0 으로 초기화 한다.

    5-1. 0 으로 초기화 하는 이유는 밑에 count++; 때문.

  6 . 마지막에 queue를 poll 하여 정답을 리턴한다.

 

class Solution {
    public int findTheWinner(int n, int k) {
        
        Queue<Integer> queue = new LinkedList<>();
        for (int i = 1; i <= n; i++) {
            queue.offer(i);
        }

        int count = 1;
        while(queue.size() > 1) {
            int polled = queue.poll();
            if (count == k) {
                count = 0;
            } else {
                queue.offer(polled);
            }
            count++;
        }

        return queue.poll();
    }
}