백준 2164번 : 카드2

2024. 5. 31. 22:52개인활동/코테

https://www.acmicpc.net/problem/2164

 

from collections import deque
n = int(input())
deck = deque([i for i in range(1, n+1)])

for _ in range(n):
    if len(deck) == 1:
        print(deck[0])
        break
    deck.popleft()
    deck.append(deck.popleft())

이 문제에서도 마찬가지로 deque를 이용해 문제를 풀었다.

 

여기서 주의해야 할 점은 n은 1부터 입력되기에, deck의 길이가 1인 경우 남은 카드를 바로 출력해줄 수 있도록 하였다.

이 조건을 생각 안하고 작업 후 남은 카드의 갯수가 1인지 확인하다보니 index error가 떴다.

 

그리고 오랜만에 숏코드 분석으로 넘어가자.

print(int(bin(int(i:=input())*2)[3:],2)or i)

여기서 bin 함수는 이진수로 변환하는 함수인데, i를 4로 설정하여 과정을 하나하나 뜯어보고자 한다.

print(int(4)*2)
### 8

print(bin(int(4)*2))
### 0b1000

print(bin(int(4)*2)[3:])
### 000

print(int(bin(int(4)*2)[3:]))
### 0

print(int(bin(int(4)*2)[3:], 2))
### 0
### int에서 뒤에 옵션 중 2가 붙는 것은 2진수로 변환하기 위한 옵션

print(int(bin(int(4)*2)[3:], 2) or 4)
### 4

이 문제에서는 비트연산이 사용된 듯한데...

좀 더 세세하게 살펴봐야할 것 같다.