🌞Algorithm/🔥Baekjoon

[Baekjoon] 14783_Eenie Meenie Miney Moe

뿌야._. 2025. 8. 29. 11:28
문제(출처: https://www.acmicpc.net/problem/14783)

< Eenie Meenie Miney Moe >

 

문제 풀이 

 

Queue를 사용하여 제거 순서에 맞게 제거한다.

 

my solution (Java)

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

public class _14783_ { // Eenie Meenie Miney Moe

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

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

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

		int arr[] = new int[l];
		st = new StringTokenizer(bf.readLine());

		for (int i = 0; i < l; i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}

		int idx = 0;
		int cnt = 1;

		while (queue.size() != 1) {
			int temp = queue.poll();

			if (cnt == arr[idx]) {
				idx += 1;
				if (idx == l) {
					idx = 0;
				}
				cnt = 1;
				continue;
			}

			queue.add(temp);
			cnt += 1;
		}
		System.out.println(queue.poll());
	}
}
변수)
n, l : 소 마릿수, 목록 길이
queue : 남아있는 소
arr : 제거 순서를 저장하는 배열
idx, cnt : 현재 제거 순서, 현재 소 위치

 

소의 마릿수와 목록 길이를 입력받는다. Queue에 1번부터 n번까지 저장하고 목록 길이만큼 제거 순서를 입력받아 배열 arr에 저장한다. Queue의 크기가 1이 아닐 때 다음 과정을 반복한다.

 

1) queue poll

2) 제거 순서라면 idx+1, cnt 초기화 및 다음 제거 실행

3) 제거 순서가 아니라면 queue에 저장 및 cnt+1

 

최종 queue의 값을 출력한다.