알고리즘

공주 구하기

스파이더웹 2022. 7. 28. 14:21
728x90
반응형

큐를 활용한 문제

 

마지막의 남은 왕자를 구하는 문제이다

 

1.  1번~N번까지의 왕자를 큐에 넣어준다

2.  특정숫자를 비교하기위한 변수 count를 선언한다

3.  특정숫자 k가되기 전까지 큐에 있는 왕자를 순서대로 처음왕자를 빼고 처음왕자를 맨 뒤로 보내준다

4.  특정숫자까지 반복하다가 특정숫자와 count변수가 일치하는 경우 해당 왕자를 아예 빼버린다( pop(); )

5.  count변수를 초기화해주고 큐의 size가 1이될때까지 반복한다

 

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class A {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int k = scanner.nextInt();

        Queue<Integer> q = new LinkedList<>();
        for(int i=1; i<=n; i++){  //1번부터 n번까지의 왕자가있어 큐에 넣어준다
            q.offer(i);
        }

        int count =1; //특정숫자와 비교하기위한 변수 count
        while(q.size()>1){
            q.offer(q.poll());//특정숫자까지는 맨앞에번호는 빠지고 다시 맨뒤에로 간다
            count++; // 위에 방법을 큐 특정숫자까지 반복
            if(count==k){//특정숫자가되면
                q.poll(); // 해당숫자는 제거
                count=1; //다시 count 변수는 초기화
            }
        }
        int answer = q.peek();
        System.out.println(answer);
    }
}


결과 7

 

728x90
반응형