관리 메뉴

Mini

요세푸스 문제 본문

Algorithm/boj

요세푸스 문제

Mini_96 2022. 8. 8. 17:24

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

 

1158번: 요세푸스 문제

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)

www.acmicpc.net

 

while(빌때까지)

for(k-1번동안) 앞에꺼빼서 뒤에넣게

    temp=q.pop

    q.add(temp)

endfor

sb.append(q.pop) //진짜제거 & 답에추가

endwhile

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.Scanner;
import java.util.Stack;
import java.util.StringTokenizer;

/*
   사용하는 클래스명이 Solution 이어야 하므로, 가급적 Solution.java 를 사용할 것을 권장합니다.
   이러한 상황에서도 동일하게 java Solution 명령으로 프로그램을 수행해볼 수 있습니다.
 */
class Main_1158_유동훈
{
	
	static int N;
	static int K;
	static Queue<Integer> q=new LinkedList<>();
	public static void main(String args[]) throws Exception
	{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st= new StringTokenizer(br.readLine()," ");
		N=Integer.parseInt(st.nextToken());
		K=Integer.parseInt(st.nextToken());
		
		for(int i=1;i<=N;++i)
		{
			q.add(i);
		}
		//입력 끝
		
		
		StringBuilder sb= new StringBuilder();
		sb.append("<");
		
		while(!q.isEmpty())
		{
			for(int i=0;i<K-1;i++)
			{
				int temp=q.poll();
				q.add(temp);
			}
			sb.append(q.poll()+", ");
		}
		
		sb.deleteCharAt(sb.length()-1);
		sb.deleteCharAt(sb.length()-1);
		sb.append(">");
		
		System.out.println(sb);
		
	
	}
}

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

11286번: 절대값 힙  (0) 2022.08.12
2961번 : 도영이가 만든 맛있는 음식  (0) 2022.08.11
3040번: 백설 공주와 일곱 난쟁이  (0) 2022.08.11
16926번: 배열돌리기1  (0) 2022.08.10
2563번 : 색종이  (0) 2022.08.09