본문 바로가기
코딩 테스트

1158번 요세푸스 문제(자바, java) - 백준 문제풀이

by 주용사 2023. 1. 11.
728x90

0 1 2 3 4 5 6

1 2 3 4 5 6 7

size = 7

cursor = 2

remove = 3

--------------------

0 1 2 3 4 5 6

1 2 4 5 6 7

size = 6

cursor = 4

remove = 6

--------------------

0 1 2 3 4 5 6

1 2 4 5 7

size = 5

cursor = 1

remove = 2

------------------

0 1 2 3 4 5 6

1 4 5 7t

size = 4

cursor = 3

remove = 7

--------------------

0 1 2 3 4 5 6

1 4 5

size = 3

cursor = 5 -> 2

remove = 5

--------------------

0 1 2 3 4 5 6

1 4

size = 2

cursor = 1

remove = 1

--------------------

0 1 2 3 4 5 6

4

size = 1

cursor = 0

remove = 4

import java.io.*;
import java.util.*;

public class Main {
	// static int ncheck = 0;
	// static int nnum = 0;
	/* output setting */
	static StringBuilder sb = new StringBuilder();

	public static void main(String[] args) throws IOException {
		/* input reader */
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		// ArrayList<Integer> list = new ArrayList<>();
		StringTokenizer st = new StringTokenizer(br.readLine());

		int n = Integer.parseInt(st.nextToken());
		int k = Integer.parseInt(st.nextToken());

		int cursor = k - 1;
		int temp;
		int ncount = 0;
		int size = 0;
		ArrayList<Integer> list = new ArrayList<>();

		for (int ii = 0; ii < n; ii++) {
			list.add(ii + 1);
		}

		sb.append("<");
		k = k - 1;
		n = n - 1;
		size = list.size();
		for (int ii = 0; ii < n; ii++) {

			if (cursor < size) {
				if (list.isEmpty() == false) {
					sb.append(list.get(cursor) + ", ");
					list.remove(cursor);
				}

			} else {
				cursor = cursor - size;
				while (cursor >= size) // 이게 핵심일듯..인덱스익셉션
					cursor = cursor - size;
				if (list.isEmpty() == false) {
					sb.append(list.get(cursor) + ", ");
					list.remove(cursor);
				}
			}

			cursor += k;
			size = list.size();
		}
		sb.append(list.get(0) + ">");

		System.out.println(sb);

		br.close();
	}
}
​
728x90