https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWGsRbk6AQIDFAVW
위 그림에 나온 단계 순서대로 알고리즘을 짰다
1) 카드 덱을 절반으로 나워서 각자 다른 리스트에 넣는다.
T = int(input())
for tc in range(1, 1+T):
n = int(input())
arr = list(input().split())
result = []
shuffle_bottom = arr[:((n-1)//2)+1]
shuffle_top = arr[((n-1)//2)+1: ]
이때 주의할 점
카드 덱에서 총 카드의 수는 짝수일수도, 홀수일수도 있기 때문에
((n-1)//2)+1
를 사용해준다.
그냥 2로 나누면 안됨!
2) 리스트 2개에서 한 카드씩 빼면서 새로운 리스트 (result)에 append 한다.
아까 1번 경우에서 만든 2개의 리스트에서 항상 shuffle_bottom이 top보다 len가 길게 된다.
따라서 while shuffle_bottom을 해주고,
bottom>top>bottom>top>bottom>top>bottom>top>... 이렇게 한장씩 pop해주고
result에 append하면 된다.
while shuffle_bottom:
a = shuffle_bottom.pop(0)
result.append(a)
if shuffle_top:
b = shuffle_top.pop(0)
result.append(b)
전체 코드)
T = int(input())
for tc in range(1, 1+T):
n = int(input())
arr = list(input().split())
result = []
shuffle_bottom = arr[:((n-1)//2)+1]
shuffle_top = arr[((n-1)//2)+1: ]
while shuffle_bottom:
a = shuffle_bottom.pop(0)
result.append(a)
if shuffle_top:
b = shuffle_top.pop(0)
result.append(b)
print(f'#{tc}', end=' ')
for i in range(len(result)):
print(result[i], end=' ')
print()
'파이썬 알고리즘' 카테고리의 다른 글
[파이썬] 백준 7113 Rectangle (while문) (0) | 2022.10.25 |
---|---|
[파이썬] 백준 7113 Rectangle (0) | 2022.10.25 |
[파이썬] SWEA 11718 사냥꾼 (0) | 2022.10.25 |
[파이썬] 백준 5568 카드 놓기 (0) | 2022.10.24 |
[파이썬] 백준 17478 재귀함수가 뭔가요? (0) | 2022.10.24 |