Algorithm/inflearn

공주 구하기

마닐라 2021. 9. 19. 23:01

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


public class Main {
    public int solution(int n, int k) {
        int answer = 0;
        //큐에서 q.offer(x);가 넣는것 q.poll();가 빼는것(빼진 값도 리턴)
        //q.peek();은 제일 앞에 있는 것을 확인만 하는것
        //q.contains(x);는 포함 boolean

        //k-1 만큼 poll 한다음에 offer 해준다.
        //그리고 k는 poll만 해준다.
        //그 과정이 한번의 루틴이다.
        //1명 남을 때 까지 반복
        //1 2 4 5 6 7 8 -> 1 2 4 5 7 8 -> 2 4 5 7 8 -> 2 4 7 8 -> 4 7 8 -> 4 7 -> 7
        Queue<Integer> Q = new LinkedList<>();
        for(int i = 1; i <= n; i++) Q.offer(i);
        while(!Q.isEmpty()) {
            //k=3이면 1,2번 빠져서 뒤에 넣어주고 아래는 3이 빠짐
            for(int i = 1; i < k; i++) Q.offer(Q.poll());
            //k를 외친사람은 그냥 poll();
            Q.poll();
            //한명이 남으면 그 왕자가 공주를 구하러간다!
            if(Q.size() == 1) answer = Q.poll();
            //이 구문이 실행되면 큐가 비어있게 되고 while문도 탈출! 깔끔하다.
        }

        return answer;
    }

    public static void main(String[] args){
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        int n = kb.nextInt();
        int m = kb.nextInt();

        System.out.print(T.solution(n, m));
    }
}

 

'Algorithm > inflearn' 카테고리의 다른 글

★응급실  (0) 2021.09.19
교육과정설계  (0) 2021.09.19
★쇠막대기  (0) 2021.09.19
후위식 연산  (0) 2021.09.17
★크레인 인형뽑기  (0) 2021.09.17