JAVA

BAEKJOON(백준) Queue - 2164번 JAVA / PYTHON CODE

violetisme 2023. 1. 29. 20:00

 

JAVA CODE

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
import java.util.Deque;
import java.util.LinkedList;
 
public class Main {
 
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		//큐 선언
		Deque<Integer> q = new LinkedList<>();
		//N장의 카드
		int N = Integer.parseInt(br.readLine());
		
        //q에 수 집어넣기
		for(int i=0; i<N; i++)
			q.offer(i+1);
		
		//q의 사이즈가 1일 때까지
		while(q.size() > 1) {
        	//첫번째 카드는 땅에 버리고
			q.remove();
            //버린 카드의 다음 카드는 버리면서 맨뒤로 보냄
			q.addLast(q.poll());
		}
        
		//한 장 남은 카드 출력
		System.out.println(q.peek());
	}
}

 

 

PYTHON CODE

 

(시간 초과 에러)

import sys

#queue list
queue = []

#N입력
N = int(sys.stdin.readline().strip())

#list에 숫자 삽입
for i in range(1, N+1) :
    queue.append(i)

while True:
    if(len(queue) == 1):
        break;

    queue.append(queue[1])
    queue.remove(queue[0])
    queue.remove(queue[0])

print(queue.pop())

 

 

(맞는 코드) - 큐 import 하여 이용

import sys
from collections import deque

n = int(sys.stdin.readline().rstrip())

cards = [x for x in range(1,n+1)]
cards = deque(cards)

def solution(cards):
    while len(cards) > 1:
        cards.popleft()
        cards.append(cards.popleft())
    print(cards[0])

solution(cards)