🌞Algorithm/🔥Baekjoon

[Baekjoon] 5599_カードの並び替え

뿌야._. 2025. 10. 16. 12:17
문제(출처: https://www.acmicpc.net/problem/5599)

< カードの並び替え >

 

문제 풀이 

 

Queue를 사용하여 문제를 해결했다.

 

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;

public class _5599_ { // カードの並び替え

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

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

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

		int m = Integer.parseInt(bf.readLine());
		for (int i = 0; i < m; i++) {
			int k = Integer.parseInt(bf.readLine());
			if (k == 0) {
				Queue<Integer> first = new LinkedList<>();
				Queue<Integer> second = new LinkedList<>();

				for (int j = 0; j < n; j++) {
					first.add(queue.poll());
				}
				while (!queue.isEmpty()) {
					second.add(queue.poll());
				}

				while (!first.isEmpty()) {
					queue.add(first.poll());
					queue.add(second.poll());
				}
			} else {
				for (int j = 0; j < k; j++) {
					queue.add(queue.poll());
				}
			}
		}

		while (!queue.isEmpty()) {
			bw.write(queue.poll() + "\n");
		}
		bw.flush();
	}
}
변수)
n : 카드의 수/2
queue : 카드 순서
m : 조작 횟수
k : 카드를 재배열하는 방법
first, second : 앞에 k개, 뒤에 k개를 저장하는 Queue

 

n을 입력받는다. 2*n개만큼 Queue에 순서대로 값을 저장한다. 조작 횟수를 입력받아 조작 횟수만큼 다음 과정을 반복한다.

 

1) k 입력

2) k가 0이라면 앞에 k개와 뒤에 k개를 섞는다.

3) k가 0이 아니라면 앞에 k개를 뒤로 보낸다.

 

최종 Queue의 값을 출력한다.



 

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

[Baekjoon] 5591_最大の和  (0) 2025.10.13
[Baekjoon] 4962_Next Mayor  (0) 2025.10.02
[Baekjoon] 7863_Very Simple Problem  (0) 2025.10.01
[Baekjoon] 20680_Birds Rituals  (0) 2025.09.29
[Baekjoon] 18206_Soft Passwords  (0) 2025.09.26