[백준/Java] 카드2

김하밍·2023년 11월 3일

알고리즘

목록 보기
7/22
  1. 문제

  2. 접근방식
    (1) 1번 카드부터 N번 카드까지 위 -> 아래 상태로 놓여있으며, 반복하게 될 동작은 제일 위 (제일 먼저)에 있는 카드를 움직여야 하는 흐름의 문제인 것 파악하자.
    (2) 제일 먼저 저장한 1번 카드를 제일 먼저 바닥에 버린다는 것은, 큐에 제일 먼저 offer() 한 것을 poll() 하는 것과 같다. (큐에서는, offer()된 순서대로 큐가 이루어지고, 이 순서와 같은 순서로 poll() 이 이루어진다.)

  3. 제출한 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;

public class Main {
    /**
     * Todo:
     *  1. BufferedReader를 사용하여 입력받을 수 있는 객체 br 생성
     *  2. Integer 형식을 저장할 수 있는 큐 객체 q 생성
     *  3. 정수 N 입력받기
     *  4. 1부터 N까지의 수 큐에 넣기
     *  5. 큐의 크기가 1보다 큰 동안 반복:
     *      - 큐에서 한 원소를 제거 (큐의 특성상 가장 먼저 저장된 원소부터 제거된다. 가장 위에 있는)
     *      - 다음 원소를 큐의 맨 뒤로 옮기기 (poll() -> offer())
     *  6. 큐에서 마지막으로 남은 원소를 출력
     */
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
    	Queue<Integer> q = new LinkedList<>();
    
    	int N = Integer.parseInt(br.readLine());
    
    	for (int i = 0; i <= N; i++) {
    		q.offer(i);
    
    	while(q.size() > 1) {
    		q.poll();
    		q.offer(q.poll());
       }
    
    	System.out.println(q.poll());
    }
}

📝 한 줄 소감

문제 파악하며 노트에 그림이나 글로 이해하고, psudo code를 잘 작성하자.

profile
나만의 언어로 기록하며 성장하기 !

0개의 댓글