티스토리 뷰

반응형

 문제

 

- N개의 정수를 가장 큰 수, 가장 작은 수, 2번째로 큰 수, 2번째로 작은 수의 식으로 정렬한다.

 

 문제 상황

 

- 최대값과 최소값을 찾는게 아니라 계속 큰 값과 작은 값을 출력해야하므로 선형시간에 해결하기가 어렵다. 10개만 만들면 되므로 변수를 5개씩 만들어 top5, bot5 를 비교해가면 O(N)에 비교 가능하다.

 

 해결 전략

 

- top list = [, , , ,] 처럼 변수 리스트를 두개 만들면 O(N)에 가능하지만 범위가 크지 않으므로 그냥 O(NlogN)의 sorted 함수를 사용하면 된다.

 

 코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
= int(input())
for idx in range(T):
    N = int(input())
    N_list = list(map(int, input().split()))
    # sorted함수를 이용해 정렬하기
    top = sorted(N_list)[len(N_list)//2:][::-1]
    bottom = sorted(N_list)[:len(N_list)//2]
    result = []
    for i in range(5):
        result.append(top[i])
        try :
            result.append(bottom[i])
        except:
            continue
    print(f"#{idx+1} {' '.join(list(map(str, result)))}")
cs

 

 

 해설

 

- 어려운 문제가 아니고 범위가 작아 sorted 함수로 처리하였다. reverse = True 할 수도 있지만 그냥 [::-1] 처리하였다.

 

 새로 학습한 것 & 실수 

 

- 상대적으로 쉬운 문제였다. 문제 조건인 10개 요소를 읽지 않아 처음에 틀렸었다. 문제를 정확히 읽자!

 

 

출처 - https://swexpertacademy.com/main/
반응형

'알고리즘 학습 > 삼성 SWEA' 카테고리의 다른 글

SWEA - 그래프 경로 (4871) [Python]  (0) 2020.08.25
SWEA - 괄호 검사(4866) [Python]  (0) 2020.08.25
SWEA - 부분 집합의 합 [Python]  (0) 2020.08.25
SWEA - 색칠하기 [Python]  (0) 2020.08.24
SWEA - 구간합 [Python]  (0) 2020.08.24
댓글