알고리즘, SQL/알고리즘

백준 2164번 : 카드2

킹갓홍 2023. 12. 6. 23:59

https://www.acmicpc.net/problem/2164

 

2164번: 카드2

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가

www.acmicpc.net

별 생각 없이 배열 사용하고 짝수 인덱스번호인 애들만 삭제해주면 되겠다 싶어서 만들었었는데, 생각한대로 안되길래 한시간 넘게 문제를 잡고있었다. 뭔가 될 거 같아서 다른 블로그에서 힌트만 살짝 보려고하니까 큐를 사용해서 너무 쉽게 푸는거 보고 머리가 띵했다.

풀이

public class Main {
    public static void main(String args[]) throws IOException {
    
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

        Queue<Integer> q = new LinkedList<>();
        for(int i=0; i<n; i++) {
            q.offer(i+1);
        }
        while(q.size()>1) {
            q.poll();
            q.offer(q.poll());
        }
        System.out.println(q.poll());
    }
}

반복수를 받아주고

반복수 만큼 큐를 채워준뒤,

큐에 데이터가 하나남을 때 까지 poll()사용해서 맨 앞의 데이터를 지워주면서 맨 뒤에다가 추가..

 

queue에 대해 정리를 한 번 해야겠다.