백준

[백준 1158번][Java][LinkedList] 요세푸스 문제

2023. 3. 17. 18:27

문제

요세푸스 문제는 다음과 같다.

1번부터 N번까지 N명의 사람이 원을 이루면서 앉아있고, 양의 정수 K(≤ N)가 주어진다. 이제 순서대로 K번째 사람을 제거한다. 한 사람이 제거되면 남은 사람들로 이루어진 원을 따라 이 과정을 계속해 나간다. 이 과정은 N명의 사람이 모두 제거될 때까지 계속된다. 원에서 사람들이 제거되는 순서를 (N, K)-요세푸스 순열이라고 한다. 예를 들어 (7, 3)-요세푸스 순열은 <3, 6, 2, 7, 5, 1, 4>이다.

N과 K가 주어지면 (N, K)-요세푸스 순열을 구하는 프로그램을 작성하시오.

입력

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

출력

예제와 같이 요세푸스 순열을 출력한다.

풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.StringTokenizer;
import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());

        // list 에 1부터 N 까지의 값 저장
        LinkedList<Integer> list = new LinkedList<>();
        IntStream.range(1, n + 1).forEach(x -> list.addLast(x));

        // StringBuilder 를 이용하여 출력할 값 저장
        StringBuilder sb = new StringBuilder();
        int index = 0;
        sb.append("<");
        while (list.size() > 1)  {
            // list 의 크기로 나눈 나머지 값으로 index를 증가시킴으로써
            // list 의 범위를 벗어나면 처음으로 돌아가게 된다.
            index = (index + k - 1) % list.size();
            sb.append(list.remove(index)).append(", ");
        }
        sb.append(list.remove()).append(">");
        System.out.println(sb);
    }
}

'백준' 카테고리의 다른 글

[백준 9012번][Java][Stack] 괄호  (0) 2023.03.20
[백준 26008번][Java] 해시 해킹  (0) 2023.03.17
[백준 10818번][Java][배열] 최소, 최대  (0) 2023.03.15
[백준 1021번][Java][Deque] 회전하는 큐  (0) 2023.03.14
[백준 25556번][Java][Stack] 포스택  (0) 2023.03.13
'백준' 카테고리의 다른 글
  • [백준 9012번][Java][Stack] 괄호
  • [백준 26008번][Java] 해시 해킹
  • [백준 10818번][Java][배열] 최소, 최대
  • [백준 1021번][Java][Deque] 회전하는 큐
dbssk
dbssk
K.Back-enddbssk 님의 블로그입니다.
dbssk
K.Back-end
dbssk
  • 분류 전체보기 (220)
    • 끄적 (0)
    • TIL (8)
      • Trouble Shooting (1)
    • Programmers (94)
      • Lv.0 (29)
      • Lv.1 (40)
      • Lv.2 (25)
    • 백준 (15)
    • 구름 (0)
    • Computer Science (79)
      • 컴퓨터 구조 (3)
      • Operating System (18)
      • 알고리즘 (9)
      • 자료구조 (11)
      • Database (10)
      • Network (8)
      • Web (12)
      • Design Pattern (8)
    • Spring (2)
    • Languages (13)
      • Java (13)
    • 북 스터디 (9)
      • 스프링 부트 핵심 가이드 (9)
      • 자바 코딩 인터뷰 완벽 가이드 (0)
    • 프론트엔드 (0)

인기 글

최근 글

태그

  • 개발자이력서
  • 백엔드공부
  • 배열
  • java
  • 백준
  • LV.2
  • 프로그래머스
  • 개발자취준
  • stack
  • 백엔드스쿨
  • hash
  • 개발자취업
  • LV.1
  • 자료구조
  • 개발자포트폴리오
  • 스택
  • 해시
  • 코딩테스트
  • Lv.0
  • spring
hELLO · Designed By 정상우.
dbssk
[백준 1158번][Java][LinkedList] 요세푸스 문제
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.