본문 바로가기
Algorithm/스택&큐&덱&힙

[백준] 2164번 카드2

by HANNI하니 2023. 1. 22.

사용 언어 - Python3

2164번: 큐 2 (실버4, 큐)

문제 ★큐 문제

 

2164번: 카드2

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가

www.acmicpc.net

 

 

정답

deque([]) 문제

(코드 풀이)

1. 시간제한 & queue.popleft()

파이썬 라이브러리 중 collections의 deque로 q를 구현하기

import sys

from collection import deque

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

q = deque([]) 

 

pop 명령어가 입력되었을 때, 큐에서 가장 앞(왼쪽)에 있는 정수를 빼고 출력하기

queue.popleft()

# 정답1 - deque 사용하기

import sys
from collections import deque

n = int(sys.stdin.readline())
q = deque([i for i in range(1,n+1)])

while (len(q)>1):
    q.popleft() #제일 위(왼쪽)에 있는 카드 버리기
    temp = q.popleft() #두번째 카드 저장하기
    q.append(temp)
    
print(q[0])

 

2. 규칙을 발견한 다른 정답

다른 분 풀이 중에 좋은 정답이 있었다. 내가 전혀 생각하지 못했던 부분이었다.

output = (input - square//2) * 2

여기서, square 는 2부터 시작해서 while문이 돌아갈때마다 4, 8,16, ... 형태로 늘어난다.

예외 - input이 1,2일 땐 input 값 프린트

# 정답2 - 규칙발견
input = int(input())
square = 2

while True:
    if (input == 1 or input == 2):
        print(input)
        break
    square *= 2
    if (square >= input):
        print((input - (square // 2)) * 2)
        break

 


레퍼런스

  • 정답 참고
 

[백준(BOJ)] 2164번 : 카드2 - PYTHON[파이썬]

www.acmicpc.net/problem/2164 2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있

tooo1.tistory.com

  • 정답 깃허브
 

GitHub - yyeongeun/codingtest: 코딩테스트 공부

코딩테스트 공부. Contribute to yyeongeun/codingtest development by creating an account on GitHub.

github.com

 

'Algorithm > 스택&큐&덱&힙' 카테고리의 다른 글

[백준] 1966번 프린터 큐  (0) 2023.01.22
[백준] 11866번 요세푸스 문제0  (1) 2023.01.22
[백준] 18258번 큐 2  (0) 2023.01.21
[백준] 1874번 스택 수열  (0) 2023.01.20
[백준] 9012번 괄호  (0) 2023.01.20

댓글