미소를뿌리는감자의 코딩
[백준 2024/01/19] 요세푸스 문제 0 본문
728x90
https://www.acmicpc.net/problem/11866
1. 접근 방법
이번 문제의 경우, 1021번 (회전하는 큐) 문제와 유사하다고 생각이 들었다.
이는 1021번 보다는 더 쉬운 문제라는 생각이 들었다.
왜냐하면, 1021번 문제의 경우 돌리는 방향을 왼쪽 or 오른쪽으로 결정해줘야 하는 문제가 있었는데,
이번 문제는 한 방향으로 돌리고, 돌리는 횟수도 정해져 있기 때문이다.
처음 코드를 작성하고 출력하여 보았을 때,
처음 숫자를 제외하고 잘 작성이 되지 않아 어떤 부분을 놓쳤나 확인해 보니,
원하는 값을 출력하기 위해, deque.removeFirst()를 하게 되었을 때,
우리가 원하는 방향과 반대로 값들이 땡겨져 왔기 때문임을 알 수 있었다.
따라서 removeFirst()를 하고 난 후
deque.addFirst(deque.removeLast());
를 통해서 원하는 대로 다음 숫자가 땡겨져 올 수 있도록 하였다.
2. 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Deque;
import java.util.ArrayDeque;
public class b11866 {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line = reader.readLine();
String[] num = line.split("\\s+");
Deque<Integer> deque = new ArrayDeque<>();
int total_num = Integer.parseInt(num[0]);
deque.addLast(total_num);
for (int i = 1; i < total_num; i++) {
deque.addLast(i);
}
int add_last;
System.out.print("<");
for (int k = 0; k < total_num; k++) {
for (int i = 0; i < Integer.parseInt(num[1]); i++) {
deque.addLast(deque.removeFirst());
}
System.out.print(deque.removeFirst());
if (k != total_num - 1) {
System.out.print(", ");
deque.addFirst(deque.removeLast());
} else {
System.out.print(">");
}
}
}
}
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준 2024/01/20] 1927번 최소 힙 (0) | 2024.01.20 |
---|---|
[백준 2024/01/19] 11050번 이항 계수 1 (0) | 2024.01.19 |
[백준 2024/01/19] 11279번 최대 힙 (0) | 2024.01.19 |
[백준 2024/01/19] 4949번 균형잡힌 세상 (0) | 2024.01.19 |
[백준 2024/01/18] 9012번 괄호 (0) | 2024.01.18 |