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값이 짝수일 때는 절반에서 앞쪽의 카드를, 홀수일 때는 절반에서 뒤쪽의 카드를 뽑아서 리스트를 새로 구성한 후에 출력하면 된다.