[SWEA][D3][#04843] 특별한 정렬
작성:    
업데이트:
카테고리: SWEA D3
태그: ProblemSolving, SWEA D3, SWEA PS
출처
학습용 포스트입니다. 본 포스트가 문제가 될 시 수정 또는 삭제하겠습니다.
문제
보통의 정렬은 오름차순이나 내림차순으로 이루어지지만, 이번에는 특별한 정렬을 하려고 한다.
N개의 정수가 주어지면 가장 큰 수, 가장 작은 수, 2번째 큰 수, 2번째 작은 수 식으로 큰 수와 작은 수를 번갈아 정렬하는 방법이다.
예를 들어 1부터 10까지 10개의 숫자가 주어지면 다음과 같이 정렬한다.
10 1 9 2 8 3 7 4 6 5
주어진 숫자에 대해 특별한 정렬을 한 결과를 10개까지 출력하시오
입력
첫 줄에 테스트 케이스 개수 T가 주어진다. 1<=T<=50
다음 줄에 정수의 개수 N이 주어지고 다음 줄에 N개의 정수 ai가 주어진다. 10<=N<=100, 1<=ai<=100
출력
각 줄마다 “#T” (T는 테스트 케이스 번호)를 출력한 뒤, 특별히 정렬된 숫자를 10개까지 출력한다.
예제
입력
3
10
1 2 3 4 5 6 7 8 9 10
10
67 39 16 49 60 28 8 85 89 11
20
3 69 21 46 43 60 62 97 64 30 17 88 18 98 71 75 59 36 9 26
출력
#1 10 1 9 2 8 3 7 4 6 5
#2 89 8 85 11 67 16 60 28 49 39
#3 98 3 97 9 88 17 75 18 71 21
My Sol
# 입력
tcs = int(input())
for tc in range(1, tcs+1):
N = int(input())
nums = list(map(int, input().split()))
result = [0]*10
# 최솟값
for mn in range(5):
min_v = nums[0]
min_i = 0
for i in range(N):
if min_v > nums[i]:
min_v = nums[i]
min_i = i
result[mn*2+1] = nums.pop(min_i)
N -= 1
# 최댓값
for mx in range(5):
max_v = nums[0]
max_i = 0
for i in range(N):
if max_v < nums[i]:
max_v = nums[i]
max_i = i
result[mx*2] = nums.pop(max_i)
N -= 1
# 출력
print(f'#{tc}',*result)
포인트는 여러 개의 항목을 가진 리스트에서 가장 작은 5개, 가장 큰 5개를 골라낸다는 것에 있다. 먼저 최솟값의 경우 5번 반복하여 범위 내에서 가장 작은 값의 인덱스를 취하여 .pop()을 이용해 값을 추출했고, 이를 1, 3, 5, 7…순서대로 차곡차곡 별도로 10개 사이즈로 정의해둔 리스트 result에 저장한다. pop을 했기 때문에 해당 항목은 제거되어 최솟값은 다시 탐색할 수 있게 된다. 최댓값도 마찬가지이다.
pop을 하므로 N을 1씩 줄여줘야 모든 범위를 탐색할 수 있다. N을 줄여주지 않으면 리스트가 가지고 있는 것보다 더 많이 반복을 실행하기 때문에 에러가 발생한다.
결과
PASS
댓글남기기