본문 바로가기

알고리즘/🥈 실버

백준 1158 요세푸스 문제 자바 풀이

728x90

난이도 : 실버4

풀이일 : 07031

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

 

1158번: 요세푸스 문제

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

www.acmicpc.net


링크로 이동하기 귀찮은 분들을 위한 문제 캡쳐


풀이 코드

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

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int N = scan.nextInt();
		int K = scan.nextInt();
		scan.close();
		
		// queue 생성 후 1~N 숫자 추가
		Queue<Integer> queue = new LinkedList<>();
		
		for (int i = 1; i < N+1; i++) {
			queue.add(i);
		}
		
		// K-1개의 숫자 맨 뒤로 이동 후 맨 앞 요소 출력 
		System.out.print("<");
		for (int j = 0; j < N-1; j++) {
			for (int k = 0; k < K-1; k++) {
				queue.add(queue.poll());
			}
			System.out.print(queue.poll()+", ");
		}
		System.out.print(queue.poll()+">");
	}
}
  1. queue를 구현하여  1~N 숫자를 큐에 삽입
  2. 출력 형식을 맞추기 위한 < 출력 과정
  3. 총 N-1 번 동안 아래 과정 반복
    1. K-1번 동안 큐의 맨 앞 요소를 맨 뒤로 이동
    2. K 번째 요소 큐에서 제거 및 문제 조건에 맞춰 출력
  4. 마지막 요소 문제 조건에 맞춰 출력

느낀점

자바로 큐를 처음 구현해보았는데, 익숙해지려면 시간이 조금 필요할 것 같다.

오늘은 실버 문제 풀었으니까 앞으로는 더 재밌는거 공부해서 어려운 문제 풀어야지ㅎㅎㅎ