Programming/SW Expert Academy
SW Expert Academy // 3499
껨코
2021. 1. 26. 17:06
SW Expert Academy 3499번 "퍼펙트 셔플" 문제입니다.
TC = int(input())
ans = []
for tc in range(1, TC + 1):
N = int(input())
string = list(input().split())
if N&1 == 1:
alist = string[0:N//2+1]
blist = string[N//2+1:N]
else:
alist = string[0:N//2]
blist = string[N//2:N]
k = "#"+str(tc)
for i in range(N):
if i&1 == 0:
k += " " + alist[i//2]
else:
k += " " + blist[i//2]
ans.append(k)
for e in ans:
print(e)
카드 덱을 정확히 절반으로 나누고 나눈 것들에서 교대로 카드를 뽑아 새로운 덱을 만드는 작업을 퍼펙트 셔플이라고 한다.
처음에 덱의 카드 수와 덱의 카드 내용을 입력받는다.
그 후 덱을 리스트의 슬라이싱을 활용해서 나눈다. 이 때 덱의 카드 수가 홀수인지 짝수인지에 따라 다르게 나누어야 한다.
그 후 for 반복문을 사용하여 i값이 짝수일 때는 절반에서 앞쪽의 카드를, 홀수일 때는 절반에서 뒤쪽의 카드를 뽑아서 리스트를 새로 구성한 후에 출력하면 된다.