본문 바로가기
TIL - 프로그래밍/Python 알고리즘

[SWEA] 3499. 퍼펙트 셔플 - Python

by chaemj97 2022. 4. 1.
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
반응형

댓글