문제(출처: 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 |