sm 기술 블로그

159. 11866(요세푸스 문제 0) - 자바 본문

문제/백준_자바

159. 11866(요세푸스 문제 0) - 자바

sm_hope 2022. 7. 26. 16:35
import java.util.*;
import java.io.*;

class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		StringBuilder sb = new StringBuilder();
		int N = sc.nextInt();
		int K = sc.nextInt();
		Deque<Integer> queue = new ArrayDeque<>();

		for (int i = 1; i <= N; i++) {
			queue.add(i);
		}
		sb.append("<");
		while (!queue.isEmpty()) {
			for (int i = 0; i < K - 1; i++) {
				queue.add(queue.poll());
			}
			if(queue.size()==1) sb.append(queue.poll()).append(">");
			else sb.append(queue.poll()).append(", ");			
		}
		
		System.out.println(sb);

	}
}

문제요약

요세푸스 순열을 완성하시오.

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=attractorlim&logNo=221030930874 

 

요세푸스문제 Josephus problem 순열

BC 1C 로마제국은 자신들의 보호 아래 헤롯을 유대의 왕으로 내세웠다가 AD 45년 유대 지역을 속주로 ...

blog.naver.com

설명

간단히 반복적으로 K번째를 제거하라는 말이다.

큐를 이용해 K번째를 제거하기 위해서는 K번째 보다 앞에있는 것은 뒤로 보내준다.

입력이

다음과 같을때,

다음과 같이 값을 구할 수 있다.

 

설명을 하면, 큐를 이용했을 때 큐 안에 값이 없을 때 까지 K-1번 앞에 있는 값을 뒤로 보내고, K번째 되었을 때 값을 꺼내

다른 곳에 저장한다.

 

		Deque<Integer> queue = new ArrayDeque<>();

		for (int i = 1; i <= N; i++) {
			queue.add(i);
		}

값을 1부터 N까지 저장한다.

		sb.append("<");
		while (!queue.isEmpty()) {
			for (int i = 0; i < K - 1; i++) {
				queue.add(queue.poll());
			}
			if(queue.size()==1) sb.append(queue.poll()).append(">");
			else sb.append(queue.poll()).append(", ");			
		}
		sb.append("<");

나중에 출력형식에 맞춰주기 위해 <를 미리 넣어줌

while (!queue.isEmpty())

큐 내에 값이 없을 때 까지 반복한다.

			for (int i = 0; i < K - 1; i++) {
				queue.add(queue.poll());
			}

K-1번 앞에 있는 값을 뒤로 보내는 행위를 반복한다.

			if(queue.size()==1) sb.append(queue.poll()).append(">");
			else sb.append(queue.poll()).append(", ");

 

 

값을 꺼냄과 동시에 sb에 저장한다.

만약, 큐사이즈가 1이라면 끝자리를 의미하므로 ">"를 그려주고 아니라면

값과 함께 ", "을 그려준다.

'문제 > 백준_자바' 카테고리의 다른 글

161. 10866(덱) - 자바  (0) 2022.07.27
160. 1966(프린트 큐) - 자바  (0) 2022.07.26
158. 2164(카드2) - 자바  (0) 2022.07.26
157. 18258(큐) - 자바  (0) 2022.07.25
156. 17298(오큰수) - 자바  (0) 2022.07.25
Comments