728x90
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWGsRbk6AQIDFAVW
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
< 📝 문제 >
카드를 퍼펙트 셔플 한다는 것은, 카드 덱을 정확히 절반으로 나누고 나눈 것들에서 교대로 카드를 뽑아 새로운 덱을 만
드는 것을 의미한다.
정확한 방식은 다음 그림과 같다.
N개의 카드가 있는 덱이 주어질 때 이를 퍼펙트 셔플하면 어떤 순서가 되는지 출력하는 프로그램을 작성하라.
만약 N이 홀수이면, 교대로 놓을 때 먼저 놓는 쪽에 한 장이 더 들어가게 하면 된다.
< ❓ 생각 >
중간 이전 카드는 짝수번째 카드에 넣고 중간 이후 카드는 홀수번째 카드에 넣기
!! 카드가 짝수장 기준 분배이므로 홀수장일시 1장 부족 -> try~except문 사용
!! 6장일 때 중간 이후 카드 시작 인덱스 3 -> 6//2 = 3
!! 5장일 때 중간 이후 카드 시작 인덱스 3 -> 5//2 = 2, (5+1)//2 = 3
< 💻 코드 >
# 테스트 케이스 수
T = int(input())
for tc in range(1,T+1):
# N개의 카드
N = int(input())
card = input().split()
# 결과
result = [0]*N
for i in range((N+1)//2):
try:
# 앞쪽 카드
result[i*2] = card[i]
# 뒤쪽 카드
result[i*2+1] = card[i+(N+1)//2]
except:
# 홀수장일 때 마지막 카드 없으니 오류
continue
print(f'#{tc}',*result)
< ❗ >
N | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
idx2 | 0 | 1 | 1 | 2 | 2 | 3 | 3 |
if N%2:
idx2 = N//2+1
else:
idx2 = N//2
# 짧게 적기
idx2 = (N+1)//2
728x90
반응형
'TIL - 프로그래밍 > Python 알고리즘' 카테고리의 다른 글
[SWEA] 5102. 노드의 거리 - Python (0) | 2022.04.05 |
---|---|
[미로1] 1226. 미로1 - Python (0) | 2022.04.02 |
[SWEA] 1860. 진기의 최고급 붕어빵 - Python (0) | 2022.03.30 |
[SWEA] 5203. 베이비진 게임 - Python (0) | 2022.03.29 |
[SWEA] 5202. 화물 도크 - Python (0) | 2022.03.29 |
댓글