[Coding Test] 백준 JAVA 1158 요세푸스 문제 - LinkedList

LeeSeungEun·2023년 5월 12일
0

Coding Test

목록 보기
12/38

1. 문제

2. 코드

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

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int k = scanner.nextInt();

        LinkedList<Integer> list = new LinkedList<>();
        for (int i = 1; i <= n; i++) {
            list.add(i);
        }

        StringBuffer sb = new StringBuffer();
        sb.append("<");

        int index = 0;
        while (!list.isEmpty()) {
            // % list.size(): 계산된 인덱스 값에 리스트의 크기(list.size())를 나눈 나머지를 구한다.
            // 이는 인덱스 값이 리스트의 범위를 초과할 경우를 대비한 것으로, 리스트를 원형으로 순환한다.
            index = (index + k - 1) % list.size();
            sb.append(list.remove(index));

            if (!list.isEmpty()) {
                sb.append(", ");
            }
        }

        sb.append(">");
        System.out.println(sb.toString()); // 그냥 sb만 입력해도 동일 값 //StringBuffer 클래스는 toString() 메서드를 오버라이딩하여 내부의 문자열 데이터를 반환하도록 구현되어 있기 때문
    }
}

3. 풀이

  • 입력으로 주어진 n과 k에 따라 수열을 생성하고, 해당 수열에서 요소를 제거한다.

4. 링크

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

0개의 댓글