본문 바로가기
알고리즘/백준

[백준 1158] 요세푸스 문제 - 자바

by binghe819 2020. 4. 25.

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

 

1158번: 요세푸스 문제

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

www.acmicpc.net


1. 풀이

이번 문제는 요세푸스 수열을 푸는 문제이다.

 

리스트를 사용해서 풀이를 하고, 백준 강의를 보았는데 큐를 사용하면 더 이해가 쉽게 풀 수 있는 것 같다.

 

순서가 차례대로 돌아가기 때문에, 맨 앞에 있는 것을 m-1만큼 pop과 push를 반복하여, 맨 앞에 있는 숫자를 pop을 하고

 

결과에 붙이면 된다.

 


2. 코드

import java.util.*;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt();
		int m = sc.nextInt();
		Queue<Integer> queue = new LinkedList<Integer>();
		StringBuilder result = new StringBuilder();
		
		// n만큼의 숫자 큐에 넣기.
		for(int i = 1; i <= n; i++) {
			queue.offer(i);
		}
		
		result.append("<");
		// 매 숫자마다.
		for(int i = 0; i < n-1; i++){
			// m번씩 pop, push를 통한 순서 바꾸기.
			for(int j = 0; j < m-1; j++) {
				queue.offer(queue.poll());
			}
			result.append(queue.poll()+", ");
		}
		
		result.append(queue.poll()+">");
		System.out.println(result);
		
		sc.close();
		return;
	}
}

'알고리즘 > 백준' 카테고리의 다른 글

[백준 17413] 단어 뒤집기2 - 자바  (0) 2020.04.25
[백준 10866] 덱 - 자바  (0) 2020.04.25
[백준 10845] 큐 - 자바  (0) 2020.04.25
[백준 1406] 에디터 - 자바  (0) 2020.04.24
[백준 1874] 스택 수열 - 자바  (0) 2020.04.24

댓글