백준 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))`를 사용하여 리스트를 생성하는 과정을 생략했습니다.
99클럽 코테 스터디 18일차 TIL + 오늘의 학습 키워드 : 스택/큐 (2) | 2024.11.15 |
---|---|
99클럽 코테 스터디 17일차 TIL + 오늘의 학습 키워드 : 스택/큐 (4) | 2024.11.13 |
99클럽 코테 스터디 15일차 TIL + 오늘의 학습 키워드 : 스택/큐 (2) | 2024.11.11 |
99클럽 코테 스터디 14일차 TIL + 오늘의 학습 키워드 : 큐 (0) | 2024.11.10 |
[챌린지]99클럽 코테 스터디 13일차 TIL + 오늘의 학습 키워드 : 스택 (6) | 2024.11.09 |