백준: 요세푸스 문제

김아무개·2023년 3월 17일
0

백준

목록 보기
4/17

문제

내 코드

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer sz = new StringTokenizer(br.readLine());
        int N = sz.hasMoreTokens() ? Integer.parseInt(sz.nextToken()) : 0;
        int K = sz.hasMoreTokens() ? Integer.parseInt(sz.nextToken()) : 0;

        LinkedList<Integer> list = new LinkedList<>();
        int cnt = 0;
        while (cnt < N) {
            list.add(++cnt);
        }

        cnt = 0;
        StringBuffer sb = new StringBuffer("<");
        while (cnt < N) {
            for (int i = 1; i < K; i++) {
                list.addLast(list.pop());
            }
            sb.append(list.pop() + ", ");
            cnt++;
        }
        System.out.println(sb.replace(sb.length() - 2, sb.length(), ">"));
    }
}

1. LinkedList 만들고 기본값 넣기

LinkedList<Integer> list = new LinkedList<>();
int cnt = 0;
while (cnt < N) {
    list.add(++cnt);
}

2. 결과 만들 변수 생성

// cnt : 몇번 제거했는지 카운팅
cnt = 0;

// 결과값 출력할 StringTokenizer
StringBuffer sb = new StringBuffer("<");

3. 결과 도출

// 제거한 숫자가 N과 같아질때까지 반복
while (cnt < N) {
	// N이 7이고 K가 3이면 
    // 1 2 건너뛰고 3 제거, 
    // 4 5 건너뛰고 6 제거 이런식으로 되어서 
    // list에서 k-1만큼 건너뛰는 반복문
    for (int i = 1; i < K; i++) {
        list.addLast(list.pop());
    }
    
    // 출력할 결과값에 제거할 숫자 입력
    sb.append(list.pop() + ", ");
    cnt++; // 제거 후 카운팅 1증가
}
profile
Hello velog! 

0개의 댓글