일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 백준
- 몽골 고기
- algorithm
- 코로나
- 헬스
- 담슈타트
- 테를지국립공원
- ICT봉사단
- 칭기즈칸
- Python
- LG글로벌챌린저
- 파이썬
- 알고리즘
- 소프트웨어 아카데미
- 테를지
- 한 줄로 서기
- 칭기스칸 동상
- 울란바토르
- 교환학생
- 초원
- 월드프렌즈 ICT 봉사단
- 여행
- 월드프렌즈
- 독일
- 몽골요리
- 게르
- 아부다비
- 몽골
- 몽골 헬스장
- SWEA
- Today
- Total
맛있는물회
[맛있는물회] <SWEA알고리즘> 4843번 "특별한 정렬" 본문
문제 조건
보통의 정렬은 오름차순이나 내림차순으로 이루어지지만, 이번에는 특별한 정렬을 하려고 한다.
N개의 정수가 주어지면 가장 큰 수, 가장 작은 수, 2번째 큰 수, 2번째 작은 수 식으로 큰 수와 작은 수를 번갈아 정렬하는 방법이다.
예를 들어 1부터 10까지 10개의 숫자가 주어지면 다음과 같이 정렬한다.
10 1 9 2 8 3 7 4 6 5
주어진 숫자에 대해 특별한 정렬을 한 결과를 10개까지 출력하시오
Input
첫 줄에 테스트 케이스 개수 T가 주어진다. 1<=T<=50
다음 줄에 정수의 개수 N이 주어지고 다음 줄에 N개의 정수 ai가 주어진다. 10<=N<=100, 1<=ai<=100
Output
각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 특별히 정렬된 숫자를 10개까지 출력한다.
생각한 아이디어
이런 문제에서 파이썬의 힘이 크게 발휘되는 것 같다. C에서는 Array에서 값을 삭제하려면 Search를 거친 후 Index값을 찾고 해당하는 값을 삭제하려면 또 다시 새로운 Array에 복사를 하던가 그런 작업을 거쳐야한다.
하지만 파이썬에서는 아주 간단하게 Index를 입력하던, Value를 입력하던 알아서 찾아서 삭제가 가능하다!
Array.remove(value)를 하면 삭제가 가능하다.
이렇게 진행하면 아주 간단하게 문제가 풀린다.
먼저 젤 큰 값 넣고 삭제하고, 젤 작은 값 넣고 삭제하고 ... 반복하면 끝!
소스코드
T = int(input())
for TC in range(1, T+1):
N = int(input())
arr = list(map(int, input().split()))
ans = list()
while len(arr) > 0:
top = max(arr)
arr.remove(top)
ans.append(top)
bot = min(arr)
arr.remove(bot)
ans.append(bot)
result = ' '.join(map(str,ans[0:10]))
print("#%d" %TC,result)
*파이썬 문법 정리
- min(Array) max(Array)를 통하여 list에서 최대 최소 값을 아주 쉽게 찾아낼 수 있다. (return 값은 value이다)
- 출력할 때 고생했던 부분이다. List를 원소값들만 출력하려 하니 계속 , 콤마 와 [] 대괄호가 붙어서 출력이 안되었다. 이럴때 Join 연산으로 새로운 String을 만들어주어서 출력을 하니 성공했다.
result = ' '.join(map(str,ans[0:10]))
ans가 값이 있는 List일때 ans[0:10]의 값을 str으로 바꾸어서 ' ' 에 join 연산을 하여 result를 만들겠다는 이야기이다.
- 리스트에서는 Array[a:b] 로 자신이 원하는 범위를 지정해서 가지고 놀 수 있다.
'IT > 알고리즘' 카테고리의 다른 글
[맛있는물회] <SWEA알고리즘> 4861번 "회문" (0) | 2020.04.02 |
---|---|
[맛있는물회] <SWEA알고리즘> 4864번 "문자열 비교" (0) | 2020.04.02 |
[맛있는물회] <SWEA알고리즘> 4839번 "이진 탐색" (0) | 2020.04.02 |
[맛있는물회] <SWEA알고리즘> 4836 "색칠하기" (0) | 2020.04.02 |
[맛있는물회] <SWEA알고리즘> 4828번 "min max" (0) | 2020.03.31 |