[SWEA] 4843. [파이썬 S/W 문제해결 기본] 2일차 - 특별한 정렬 [D3]

yunh·2022년 2월 15일
0

알고리즘 - SWEA 🐣

목록 보기
21/103
post-thumbnail

📚 문제

보통의 정렬은 오름차순이나 내림차순으로 이루어지지만, 이번에는 특별한 정렬을 하려고 한다.

N개의 정수가 주어지면 가장 큰 수, 가장 작은 수, 2번째 큰 수, 2번째 작은 수 식으로 큰 수와 작은 수를 번갈아 정렬하는 방법이다.

예를 들어 1부터 10까지 10개의 숫자가 주어지면 다음과 같이 정렬한다.

10 1 9 2 8 3 7 4 6 5

주어진 숫자에 대해 특별한 정렬을 한 결과를 10개까지 출력하시오

정수의 개수는 100개까지 주어지지만 10개까지만 정렬시키면 되는 문제이니 전부 정렬시키지않고 선택정렬을 활용한다. 가장 큰 수, 가장 작은 수, 2번째 큰 수, 2번째 작은 수 식으로 정렬해야 하므로 먼저 전체에서 가장 큰 수를 찾아 맨 앞의 수와 자리를 바꾼다. 그리고 그다음에는 정렬시킨 첫번째 수를 제외한 나머지 중 제일 작은 수를 찾아 2번째 자리의 수와 바꾸어준다. 이를 반복한다.

최대, 최소가 반복되니 index를 % 2 로 모듈러 연산자를 활용해 짝수와 홀수에 각각 적용시켜 준다.

📒 코드

T = int(input())
for tc in range(1, 1 + T):
    N = int(input())  # 배열의 길이
    arr = list(map(int, input().split()))
    for i in range(10):  # 10개만 정렬
        min_max = i
        if i % 2:  # i가 홀수일 때 최솟값
            for j in range(i, N):
                if arr[min_max] > arr[j]:
                    min_max = j
        else:  # i가 짝수일 때 최댓값
            for j in range(i, N):
                if arr[min_max] < arr[j]:
                    min_max = j
        arr[i], arr[min_max] = arr[min_max], arr[i]  # 최댓값과 교환
    print(f'#{tc} ', end='')
    print(*arr[:10])  # 앞 정렬된 10개만 출력

🔍 결과 : Pass

profile
passionate developer

0개의 댓글