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
반응형
'TIL - 프로그래밍 > Python 알고리즘' 카테고리의 다른 글
[SWEA] 1954. 달팽이 숫자 - Python (0) | 2022.02.20 |
---|---|
[SWEA] 1210. Ladder1 - Python (0) | 2022.02.20 |
[SWEA] 4839. 이진탐색 - Python (0) | 2022.02.20 |
[SWEA] 4837. 부분 집합의 합 - Python (0) | 2022.02.20 |
[SWEA] 4836. 색칠하기- Python (0) | 2022.02.19 |
댓글