728x90
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWGsRbk6AQIDFAVW
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
< 📝 문제 >
카드를 퍼펙트 셔플 한다는 것은, 카드 덱을 정확히 절반으로 나누고 나눈 것들에서 교대로 카드를 뽑아 새로운 덱을 만
드는 것을 의미한다.
정확한 방식은 다음 그림과 같다.

N개의 카드가 있는 덱이 주어질 때 이를 퍼펙트 셔플하면 어떤 순서가 되는지 출력하는 프로그램을 작성하라.
만약 N이 홀수이면, 교대로 놓을 때 먼저 놓는 쪽에 한 장이 더 들어가게 하면 된다.
< ❓ 생각 >
1.

2.

< 💻 코드 >
1.
# 테스트 케이스의 개수
T = int(input())
for tc in range(1,T+1):
# N장의 카드
N = int(input())
card = input().split()
result = ['']*len(card)
# 홀수 장
if N%2:
for i in range(N//2+1):
result[2*i] = card[i]
for i in range(N//2):
result[2*i+1] = card[i+N//2+1]
# 짝수 장
else:
for i in range(N//2):
result[2*i] = card[i]
result[2*i+1] = card[i+N//2]
print(f'#{tc}',*result)
2.
# 테스트 케이스의 개수
T = int(input())
for tc in range(1,T+1):
# N장의 카드
N = int(input())
card = input().split()
st_idx1 = 0
st_idx2 = (N+1)//2
print(f'#{tc}',end=' ')
for i in range(st_idx2):
print(card[st_idx1+i],end=' ')
# 마지막 값 입력 안함
if st_idx2+i < N:
print(card[st_idx2+i],end=' ')
print()
< ❗ >
응용
1.
if N%2:
idx2 = N//2+1
else:
idx2 = N//2
idx2 = (N+1)//2
2. n 순환 0->1->2->3->0
n = (n+1)%4
3. 1->0, 0->1
n = (n+1)%2
728x90
반응형
'TIL - 프로그래밍 > Python 알고리즘' 카테고리의 다른 글
[SWEA] 4874. Forth - Python (0) | 2022.02.25 |
---|---|
[SWEA] 1225. 암호생성기 - Python (0) | 2022.02.25 |
[SWEA] 11315. 오목 판정 - Python (0) | 2022.02.24 |
[SWEA] 1220. Magnetic - Python (0) | 2022.02.24 |
[SWEA] 1223. 계산기2 - Python (0) | 2022.02.23 |
댓글