이번 문제는 큐에 대한 기본적인 구조를 알 수 있는 문제이다.
우선 문제에 대한 설명을 하자면, 카드의 총 갯수에서 가장 앞에 있는 카드는 버리고, 다음 장의 카드는 맨 뒤로 보내는 것이다.
바로 코드를 보여주겠다.
package Algo.Queue;
import java.io.*;
import java.util.*;
public class Q2164 {
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Queue<Integer> queue = new LinkedList<Integer>();
try {
final int CARD_LENGTH = Integer.valueOf(br.readLine());
int card = 0;
for(int i = 1; i <= CARD_LENGTH; i++)
queue.add(i);
while(true) {
if(queue.size() == 1) { // 한개 남았을 때 break;
card = queue.peek();
break;
}
queue.poll(); // 위에 있는거 버리고
queue.offer(queue.poll()); // 다음 카드는 맨 뒤로 보내기
}
System.out.println(card);
} catch(IOException ioe) {
ioe.printStackTrace();
}
}
}
내가 이 로직을 구현했을 때, 구현 순서를 순서대로 설명하겠다.
1. 사용자에게로부터 총 카드의 개수를 입력 받기.
2. 입력 받은 카드를 번호에 맞게 초기화 작업하기
3. 무한 루프를 돌리는데, 큐의 사이즈가 1개가 남았다면 break 하기
4. 무한 루프를 돌리는 방식은, 큐의 가장 윗장은 완전히 버리고, 그 다음장은 버리면서 맨 뒤에 넣기
5. 마지막에 남아있는 카드를 출력하기.
이 순서대로 코드를 해석하면 눈에 잘 들어올것이라 생각한다.
'알고리즘 분류 > 큐 알고리즘' 카테고리의 다른 글
10866 덱 JAVA (0) | 2023.03.30 |
---|---|
18258 큐2 JAVA (0) | 2023.03.30 |
1966 프린터 큐 JAVA (0) | 2023.03.30 |
1158 요세푸스 순열 JAVA (0) | 2023.03.30 |
10845 큐 JAVA (0) | 2023.03.30 |