swexpertacademy.com/main/learn/course/lectureProblemViewer.do
※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.
보통의 정렬은 오름차순이나 내림차순으로 이루어지지만, 이번에는 특별한 정렬을 하려고 한다.
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 |
🛒 나의 풀이
T = int(input())
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1, T + 1):
N=int(input()) # 정수의 개수
ai=list(map(int, input().split())) # N개의 정수
max=sorted(ai, reverse=True) # 내림차순 정렬
min=sorted(ai) # 오름차순 정렬
length=len(ai)
result=list()
i=0 # 인덱스
while i != length//2 : # 절반까지만 반복해야 중복이 없음.
result.append(max[i]) # 큰 수 넣은 후 작은 수 넣기
result.append(min[i])
i+=1
print('#%d' %test_case, end=' ')
for i in result[:10]: # 최대 10개만 출력
print(i, end=' ')
print()
내가 자주하는 실수 : input받아오는 것. 꼭 모든 변수 선언 후 확인하자.. or 보고싶은 부분만 입력을 직접 주든지
result가 한 줄에 띄어쓰기로 구분되면서 쭉 나오도록 하려면 sep가 아니라 end를 ' '줘야 띄어쓰기가 되네.
아.. N이 있으니까 length=len(ai)할 필요없다(자주 이러네ㅠ)
입력받은 리스트 ai를 내림차순 정렬, 오름차순 정렬한 리스트를 생성한다.
큰 수, 작은 수 순서로 리스트 result에 추가했다.
👒 다른사람 풀이
TC = int(input())
for tc in range(1, TC+1):
N = int(input()) # 정수의 개수
Data = list(map(int, input().split())) # N개의 정수
lst = [0]*N
# Max 값 구하기
for i in range(N//2):
lst[i*2] = max(Data) # 짝수 index에 max값
Data.pop(Data.index(max(Data)))
# Min 값 구하기
for i in range(N//2):
lst[i*2+1] = min(Data) # 홀수 index에 min값
Data.pop(Data.index(min(Data)))
print('#%s'%tc, end=' ')
for i in range(10): # 최대 10개까지 출력
print(lst[i], end=" ")
print()
for문으로 Max와 Min값을 구한다. pop을 해가면서 n번째로 큰 수 or 작은 수를 구한다.
Max는 lst의 짝수 index에 값을 넣고 Min은 홀수 index에 값을 넣어서 최종 결과값인 lst를 만든다.
T = int(input())
for t_idx in range(1, T+1):
N = int(input()) # 정수의 개수
numbers = list(map(int, input().split())) # N개의 정수
sort_list = []
while numbers:
max_num = max(numbers)
min_num = min(numbers)
sort_list.extend([str(max_num), str(min_num)])
numbers.remove(max_num)
numbers.remove(min_num)
print(f"#{t_idx} {' '.join(sort_list[:10])}")
리스트 numbers의 max와 min을 구하고 sort_list에 확장한다. 나도 append 대신에 extend를 썼으면 더 좋았을텐데
값을 연달아 추가할 때는 append를 2번 쓰기보다는 extend를 사용해야겠다.
리스트 numbers에서 max_num과 min_num을 삭제하면서 null이 되기 전까지 반복한다.
sort_list의 0부터 9까지의 값을 문자열로 변환해서 출력한다. ' '라서 값들이 공백으로 구분되어 출력된다.
출력부분도 잘 짰네. print문을 좀 더 효율적으로 활용할 수 있도록 공부를 해야겠다.
'coding test' 카테고리의 다른 글
[파이썬] 4861. 회문 (0) | 2021.01.08 |
---|---|
[파이썬] 4864. 문자열 비교 (0) | 2021.01.08 |
[파이썬] 4839. 이진탐색 (0) | 2021.01.07 |
[파이썬] 4837. 부분집합의 합 (0) | 2021.01.06 |
[파이썬] 4836. 색칠하기 (0) | 2021.01.06 |