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

[SWEA] 4843. 특별한 정렬 - Python

by chaemj97 2022. 2. 20.
728x90

https://swexpertacademy.com/main/learn/course/lectureProblemViewer.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

< 📝 문제 >

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

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

 

는 방법이다.

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

 

10 1 9 2 8 3 7 4 6 5
 

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


< ❓ 생각 >

인덱스를 이용해서 범위를 줄이면서 최댓값, 최솟값을 찾자

idx 0~N에서 최댓값을 idx 0에 두고, 최솟값은 idx 1에 두기

idx 2~N에서 최댓값을 idx 2에 두고, 최솟값을 idx 3에 두기

반복

idx 8~N에서 최댓값을 idx 8에 두고, 최솟값을 idx 9에 두기


< 💻 코드 >

# T : 테스트 케이스 개수
T = int(input())
for tc in range(1,T+1):
    # N : 정수의 개수, arr : N개의 정수
    N = int(input())
    arr = list(map(int,input().split()))

    # 특별히 정렬된 숫자를 10개까지만 출력할 것이니 10개만 만들기
    for i in range(0,10,2):
        # 큰 값 구해서 구간의 맨 앞으로
        max_v = i
        for j in range(i+1,N):
            if arr[max_v] < arr[j]:
                max_v = j
        arr[i], arr[max_v] = arr[max_v], arr[i]

        # 작은 값 구해서 큰 값 바로 뒤
        min_v = i+1
        for k in range(i+2,N):
            if arr[min_v] > arr[k]:
                min_v = k
        arr[i+1], arr[min_v] = arr[min_v], arr[i+1]

    print(f'#{tc}', *arr[0:10])


< ❗ >

파이썬에서만 가능

arr[i], arr[max_v] = arr[max_v], arr[i]

슬라이싱도 앞은 포함 뒤는 포함X

a = 'python'
print(a[0:3])

# 결과
# pyt
728x90
반응형

댓글