🌞Algorithm/🔥Baekjoon

[Baekjoon] 9863_Calling All Programmers

뿌야._. 2025. 5. 27. 16:20
문제(출처: https://www.acmicpc.net/problem/9863)

< Calling All Programmers >

 

문제 풀이 

 

Queue를 사용하여 m번째 값을 제거한다.

예를 들어 입력이 다음과 같다면

10 7 5

 

Queue에 <1, 2, 3, 4, 5, 6, 7, 8, 9, 10>이 들어간다.

1번째) <8, 9, 10, 1, 2, 3, 4, 5, 6> -> 7 제거

2번째) <5, 6, 8, 9, 10, 1, 2, 3> -> 4 제거

3번째) <3, 5, 6, 8, 9, 10, 1> -> 2 제거

4번째) <3, 5, 6, 8, 9, 10> -> 1 제거

5번째) <5, 6, 8, 9, 10> -> 3이 정답

 

my solution (Java)

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

public class _9863_ { // Calling All Programmers

	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 = new StringTokenizer(bf.readLine());

		int n = 0;
		while ((n = Integer.parseInt(st.nextToken())) != 0) {
			int m = Integer.parseInt(st.nextToken());
			int k = Integer.parseInt(st.nextToken());

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

			for (int i = 0; i < k; i++) {
				for (int j = 0; j < m; j++) {
					int num = queue.poll();
					if (j == m - 1) {
						if (i == k - 1) {
							bw.write(num + "\n");
						}
					} else {
						queue.add(num);
					}
				}
			}
			st = new StringTokenizer(bf.readLine());
		}
		bw.flush();
	}
}
변수)
n, m, k : 사람 수, 건너뛰는 위치 수, k번째 호출자
queue : Queue <Integer>
num : 호출되는 사람 번호

 

n, m, k이 0이 아닐 때까지 입력받는다. Queue에 1부터 n까지 저장한다. k번째 호출자를 구하기 위해 다음 과정을 k번 반복한다. 

 

1) 한 명씩 poll

2) m번째 사람이고 k번째 호출자라면 poll 한 값 출력

3) m번째 사람이 아니라면 제거되지 않으므로 Queue에 추가



 

'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글

[Baekjoon] 7585_Brackets  (1) 2025.05.29
[Baekjoon] 24570_Harp Tuning  (1) 2025.05.28
[Baekjoon] 26876_New Time  (1) 2025.05.26
[Baekjoon] 10689_Hamza  (1) 2025.05.23
[Baekjoon] 4679_The Snail  (1) 2025.05.22