Information Security Study

[백준] 2164: 카드2 본문

Programming/JAVA

[백준] 2164: 카드2

gayeon_ 2024. 1. 23. 14:52

 

자료구조 중 큐를 사용해서 풀 수 있는 문제이다.

맨 윗 카드를 poll()한 뒤 그 다음 카드를 마지막 순서로 변경해 주면 된다.

순서 변경은 두 번째 카드를 poll()해서 변수(tmp)에 저장 후 

다시 큐에 offer(tmp)해주면 된다.

 

 

 

입출력 예시다.

 

 

 

package boj;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.EmptyStackException;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
import java.util.StringTokenizer;

public class Main {
	
	// 맨 윗장 버리고 다음장은 마지막장으로 이동

	public static void main(String[] args) throws IOException, NullPointerException{
		// StringBuilder를 사용하여 결과를 한 번에 출력하기 위한 객체 생성
        StringBuilder sb = new StringBuilder();

        // BufferedReader를 사용하여 입력을 받기 위한 객체 생성
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        // 저장할 큐 생성
        Queue<Integer> queue = new LinkedList<Integer>();
        
        // 입력된 카드의 장수
       	int T = Integer.parseInt(br.readLine());
       	
       	int tmp = 0;
       	
       	int current = 0;
       	
       	// 1부터 T까지 큐에 삽입
       	for(int i = 1; i <= T; i++) {
       		queue.offer(i);
       	}
       	
       	// 큐에 카드가 하나만 남을 때까지 반복
       	while(queue.size() > 1) {
       		
       		if(queue.isEmpty()) {
       			break;
       		}
       		
       		// 첫 장 버리고 다음장은 마지막장으로 바꾸는 부분 작성
       		queue.poll();
       		
       		if(!queue.isEmpty()) {
       			tmp = queue.poll();
           		queue.offer(tmp);
       		}
       		
       		
       	}
       	
       	if(!queue.isEmpty()) {
       		sb.append(queue.poll());
           	
           	System.out.println(sb);
       	}
       	
	}
	

  

}

 

첫 장을 버리고 카드의 순서를 바꾸는 부분은

while문으로 큐에 카드가 하나만 남을 때까지 반복해주면 된다.

'Programming > JAVA' 카테고리의 다른 글

[백준] 1406: 에디터  (1) 2024.01.23
[백준] 1158: 요세푸스 문제  (0) 2024.01.23
[백준] 18258: 큐2  (0) 2024.01.22
[백준] 10845: 큐  (0) 2024.01.22
[백준] 1874: 스택 수열  (0) 2024.01.22