🌞Algorithm/🔥Baekjoon

[Baekjoon] 15832_Aku Negaraku

뿌야._. 2025. 9. 10. 10:51
문제(출처: https://www.acmicpc.net/problem/15832)

< Aku Negaraku >

 

문제 풀이 

 

ArrayList를 사용하여 마지막에 남는 교육생을 고른다.

 

my solution (Java)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
import java.io.OutputStreamWriter;

public class _15832_ { // Aku Negaraku

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st;

		String str = "";

		while (!(str = bf.readLine()).equals("0 0")) {
			st = new StringTokenizer(str);

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

			ArrayList<Integer> list = new ArrayList<>();

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

			int idx = 0;
			while (list.size() > 1) {
				idx = (idx + m - 1) % list.size();

				list.remove(idx);
			}
			bw.write(list.get(0) + "\n");
		}
		bw.flush();
	}
}
변수)
n, m : 회사 수, 건너뛰기 값
list : 교육생 번호를 저장한 ArrayList <Integer> 
idx : 추첨된 번호

 

입력값이 "0 0"이 아닐 때까지 회사 수와 건너뛰기 값을 입력받아 다음 과정을 반복한다.

 

1) ArrayList에 1부터 n까지 저장

2) ArrayList의 크기가 1이 될 때까지 m값만큼 건너뛰면서 제거

3) 최종 남은 ArrayList 값 출력