[Java] 백준 2164번: 카드2

U·2023년 8월 10일

백준

목록 보기
41/116

문제


일단 생각하자!

  • 가장 앞의 카드를 버리고, 뒤로 보내는 과정을 반복하므로 Queue를 이용하여 풀이한다. 생각보다 오래걸렸지만 정말 간단했던 문제!

풀이

package BJ;

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

/**
 * 
 * @author 김유나
 * 2023-08-10
 * 
 * [문제] 백준 2164번 카드2
 * [아이디어]
 * - 가장 위의 카드를 뒤로 보내는 과정을 반복하므로 Queue를 사용
 *
 * 메모리 : 49,016kb 실행 시간 : 288ms
 * 
 */
public class BJ_2164_카드2_김유나 {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in); // 입력이 많지 않아 Scanner 사용
		int N = s.nextInt(); // 정수 N
		
		Queue<Integer> cards = new LinkedList<>(); // Queue
		
		for (int i = 1; i <= N; i++) {
			cards.offer(i); // 1부터 N까지 Queue에 넣기
		}
		
		while (cards.size() != 1) { // Queue의 사이즈가 1이 아닌 동안 반복
			cards.poll(); // 가장 위의 카드를 버린 후
			cards.offer(cards.poll()); // 또 가장 위의 카드 맨 뒤로 보내기
		}
		System.out.println(cards.peek()); // 마지막 남은 카드 반환
		
	}
}
profile
백엔드 개발자 연습생

0개의 댓글