🌞Algorithm/🔥Baekjoon

[Baekjoon] 27042_Bonbons

뿌야._. 2025. 8. 28. 14:04
문제(출처: https://www.acmicpc.net/problem/27042)

< Bonbons >

 

문제 풀이 

 

Queue를 사용하여 한 마리씩 제거한다.

 

my solution (Java)

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

public class _27042_ { // Bonbons

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

		Queue<Integer> queue = new LinkedList<>();

		int n = Integer.parseInt(bf.readLine());

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

		boolean flag = false;
		while (queue.size() != 1) {
			int num = queue.poll();
			if (!flag) {
				queue.add(num);
			}
			flag = !flag;
		}
		System.out.println(queue.poll());
	}
}
변수)
queue : 현재 남아있는 소 번호
n : 마릿수
flag : 제거 판단

 

소의 마릿수를 입력받아 Queue에 1부터 n까지 저장한다. Queue의 크기가 1이 아닐 때 다음 과정을 반복한다.

 

1) queue poll

2) 나가야 하는 소가 아니라면 다시 queue에 저장

3) flag 반대로 저장

 

최종 queue에 남아있는 값을 출력한다.