[알고리즘] Stack, Queue (6) : 공주구하기 (JAVA)

ho's·2022년 6월 11일
0

💇‍♀️ 공주 구하기

🕵️‍♂️ 문제


👮‍♀️ 풀이

Queue의 구조

First In First Out(FIFO),

🔈 Queue의 구조

🔈 Queue의 메소드

🔈 문제 처리 과정

  • K = 3 일 때

0. 1~N 번까지 Queue에 저장한다.

1. K-1번째 까지 index를 뒤에 저장한다.

2. K번째를 poll 한다.

1,2 과정을 반복한다.




🤴 소스코드

🔈 solution 메소드

	public int solution(int n, int k){
    	int answer= 0;
    	Queue<Integer> Q = new LinkedList<>();
        for(int i=1;i<=n;i++)
         Q.offer(i);
        while(!Q.isEmpty()){
        	for(int i=1;i<k;i++)
            	Q.offer(Q.poll());
                // K=3이면 Q의 1,2번째를 꺼내고 뒤에 저장한다.
                Q.poll(); // Q의 맨 앞 index를 제거한다.
                if(Q.size() == 1)
                 answer = Q.poll();
        }
        return answer;
    }	

🔈 main 메소드

public static void(String[] args){
	Main41 T = new Main41();
    Scanner kb = new Scanner(System.in);
    int n = kb.nextInt();
    int k = kb.nextInt();
    System.out.println(T.solution(n, k));
}

🔈 전체 코드

package algolecture;

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

public class Main41 {
    public int solution(int n, int k) {
        int answer = 0;

        Queue<Integer> Q = new LinkedList<>();
        for(int i=1;i<=n;i++)
            Q.offer(i);
        while(!Q.isEmpty()){
            for(int i=1;i<k;i++)
                Q.offer(Q.poll());
            Q.poll();
            if(Q.size()==1)
                answer = Q.poll();
        }

        return answer;
    }


    public static void main(String[] args) {
        Main41 T  = new Main41();
        Scanner kb = new Scanner(System.in);
        int n = kb.nextInt();
        int k = kb.nextInt();
        System.out.println(T.solution(n ,k));

    }
}

🔈 찾아보면 좋을 것들

  • Queue를 구현할때 왜 LinkedList<>() 형식을 따르는가?
profile
그래야만 한다

0개의 댓글