상세 컨텐츠

본문 제목

99클럽 코테 스터디 16일차 TIL + 오늘의 학습 키워드 : 스택/큐

본문

728x90
반응형

백준 2161번 카드 1문제


N = int(input())

from collections import deque
cards = deque(list(range(1,N+1)))
answer = []

while cards:
    dropped = cards.popleft()
    answer.append(dropped)
    if cards:
        shuffled = cards.popleft()
        cards.append(shuffled)

print(' '.join(map(str,answer)))

이 코드는 카드 덱에서 카드를 버리고, 다음 카드를 제일 아래로 이동시키는 과정을 구현한 것이다. 아래는 코드의 작동 방식에 대한 설명입니다.

코드 설명
1. 입력 받기: `N = int(input())`를 통해 카드의 개수를 입력받습니다.
2. 카드 덱 생성: `deque(list(range(1, N + 1)))`를 사용하여 1부터 N까지의 카드를 포함하는 덱을 생성합니다.
3. 버리기 및 이동:
   - `while cards:` 루프를 통해 카드가 남아 있는 동안 반복합니다.
   - `dropped = cards.popleft()`로 제일 위의 카드를 버리고, `answer.append(dropped)`로 버린 카드를 `answer` 리스트에 추가합니다.
   - `if cards:` 조건문을 통해 카드가 남아 있을 경우, 다음 카드를 `shuffled = cards.popleft()`로 꺼내고, `cards.append(shuffled)`로 제일 아래로 이동시킵니다.
4. 결과 출력: `print(' '.join(map(str, answer)))`를 통해 버린 카드의 순서를 공백으로 구분하여 출력합니다.

코드 개선
제공하신 코드는 잘 작동하지만, 약간의 개선을 통해 가독성을 높일 수 있습니다. 예를 들어, `deque`를 사용할 때 리스트를 직접 생성하는 대신 `range`를 직접 사용할 수 있습니다.

아래는 약간 개선된 코드입니다:

```python
from collections import deque

N = int(input())
cards = deque(range(1, N + 1))
answer = []

while cards:
    dropped = cards.popleft()
    answer.append(dropped)
    if cards:
        shuffled = cards.popleft()
        cards.append(shuffled)

print(' '.join(map(str, answer)))
```

이 코드는 원래 코드와 동일한 기능을 수행하지만, `deque(range(1, N + 1))`를 사용하여 리스트를 생성하는 과정을 생략했습니다.



728x90
반응형

관련글 더보기