문제(출처: https://www.acmicpc.net/problem/1835)
< 카드 >
문제 풀이
Deque를 사용하여 구현한다.
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.ArrayDeque;
import java.util.Deque;
public class _1835_ { // 카드
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());
int arr[] = new int[n];
Deque<Integer> queue = new ArrayDeque<>();
for (int i = 0; i < n; i++) {
queue.add(i);
}
int idx = 1;
while (!queue.isEmpty()) {
for (int i = 0; i < idx; i++) {
queue.addLast(queue.pollFirst());
}
int num = queue.pollFirst();
arr[num] = idx++;
}
for(int i=0; i<n; i++) {
bw.write(arr[i]+" ");
}
bw.flush();
}
}
변수)
n : 카드 개수
arr : 카드 순서
queue : Deque <Integer>
idx : 반복하는 수
num : 카드 index
카드의 개수 n을 입력받는다. Deque에 카드 순서(0~n-1)를 저장한다. queue가 빌 때까지 다음 과정을 반복한다.
1) idx 수만큼 queue 맨 앞 값을 뽑아 맨 뒤로 저장한다.
2) queue에서 맨 앞 값을 뽑아 그 값을 num에 저장한다.
3) arr [num] = idx 한다.
최종 배열 값을 출력한다.
'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글
[Baekjoon] 1347_미로 만들기 (0) | 2024.04.05 |
---|---|
[Baekjoon] 21919_소수 최소 공배수 (0) | 2024.04.04 |
[Baekjoon] 1531_투명 (0) | 2024.04.02 |
[Baekjoon] 14232_보석 도둑 (1) | 2024.04.01 |
[Baekjoon] 9440_숫자 더하기 (0) | 2024.03.29 |