코딩테스트/SWExpertAcademy

특별한정렬 Python(SW Expert Academy)

멍토 2020. 3. 1.

난이도 : D3

문제번호 : 4843

※ 저의 풀이가 무조건적인 정답은 아닙니다.

다른 코드가 좀더 효율적이고 좋을 수 있습니다.

다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.

문제 주소 및 출처입니다.

https://swexpertacademy.com/main/learn/course/subjectDetail.do?courseId=AVuPDN86AAXw5UW6&subjectId=AWOVF-WqqecDFAWg#

 

SW Expert Academy

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

swexpertacademy.com


목차

1. 문제 설명

2. 문제 해석

3. 소스 코드


1. 문제 설명

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

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

2. 문제풀이

파이썬 2일차 연습문제중 마지막 문제였다.

특별한 정렬이라고 하여 현재 선택할수 있는 제일 큰 수와 제일 작은 수를 번갈아 가며 놓는 방식이다.

다른 언어였다면 정렬을 따로 구현하거나 라이브러리를 가져와여 사용해야 하지만 

파이썬은 기본적으로 지원하는 정렬을 이용하여 쉽게 풀수 있었다.

한번 정렬을 하게되면 오름차순 혹은 내림차순으로 정렬이 되는데

제일앞과 뒤를 번갈아가며 출력을 하면 큰수와 작은수가 나오게 된다.

라이브러리를 이용하면 D1급이라고 생각이 되며,

정렬을 직접 구현해야 D3급은 되지 않나 라고 생각한다.


3. 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#D3 4843 특별한 정렬
= int(input())
for t in range(1, T+1):
    abc = input()
    num_list = list(map(int, input().split()))
    num_list.sort()
    result = []
    count = 0
    while count<10:
        if count & 1:
            result.append(num_list.pop(0))
        else:
            result.append(num_list.pop())
        count+=1
    print("#{} ".format(t), end='')
    print(*result)

댓글

💲 광고입니다.