| 난이도: ●○○ | 풀이 시간: 15분 | 시간 제한: 1초 | 메모리 제한: 128MB | 기출: T 기업 코딩 테스트 |
문제: 하나의 수열에는 다양한 수가 존재한다. 이러한 수는 크기에 상관없이 나열되어 있다. 이수를 큰 수부터 작은 수의 순서로 정렬해야 한다. 수열을 내림차순으로 정렬하는 프로그램을 만드시오.
| 입력 조건: – 첫째 줄에 수열에 속해 있는 개수 N이 주어진다. (1 ≦ N ≦ 500) – 둘째 줄부터 N + 1번째 줄까지 N개의 수가 입력된다. 수의 범위는 1 이상 100,000 이하의 자연수이다. 출력 조건: – 입력으로 주어진 수열이 내림차순으로 정렬된 결과를 공백으로 구분하여 출력한다. 동일한 수의 순서는 자유롭게 출력해도 괜찮다. |
| 입력 예시) 3 15 27 12 |
| 출력 예시) 27 15 12 |
문제 풀이)
일단은 내림차순이므로 숫자들을 입력 받아서 큰 것부터 작은 순서로 줄을 세우는 문제이다.
입력 예시를 보면 첫 줄에 3이 나온다. 그걸 먼저 입력으로 받고 숫자를 여러 개 받아야 하니 이전처럼 리스트를 이용해서 모아둔다. 그 후, 그 횟수(N)만큼 반복하면서 입력 받아 리스트 안에 넣는다. 리스트에 하나씩 추가시에는 append()를 쓴다.
파이썬에 정렬 함수는 sorted()가 있다. 그러나, 기본이 오름차순이라서 그냥 쓰면 작은 것부터 나오기 때문에, 내림차순으로 뒤집으려면 reverse=True 옵션을 줘야 한다. 정렬한 결과는 다시 array에 덮어씌웠다.
마지막에는 그냥 print(array)를 했을 경우 리스트 자체로 나오기 때문에, 출력 예시처럼 하려면 end= 옵션을 써서 출력 끝에 줄바꿈 대신 원하는 걸 붙일 수 있다.
내가 쓴 답과 그냥 답안이랑 똑같아서 아래는 답안을 넣었다. (사실상 답안 예시에 있는 주석만 추가한 수준)
# N을 입력받기n = int(input())# N개의 정수를 입력받아 리스트에 저장array = []for i in range(n): array.append(int(input()))# 파이썬 기본 정렬 라이브러리를 이용하여 정렬 수행array = sorted(array, reverse=True)# 정렬이 수행된 결과를 출력for i in array: print(i, end=' ')
이걸 실제로 입력 예시를 입력해보면, 아래와 같다.

이 외에도 다른 풀이를 보면, 아래와 같다.
n = int(input())nums = [int(input()) for _ in range(n)]print (*sorted(nums, reverse=True))
sorted 를 이용하면…그냥..너무나도 쉬운것.. 코드가 길어지지도 않는다.
sorted 앞의 *는 unpacking의 뜻으로 리스트를 풀어 헤치는 연산자이다.
예를들어 계란 곽의 리스트가 있고 그 안에 계란이 1, 2, 3, 4, 5가 있다고 하면,
eggs = [1, 2, 3, 4, 5]
print(eggs) # 판째로 던지는 것 → [1, 2, 3, 4, 5]
print(*eggs) # 낱개로 꺼내서 던지는 것 → 1 2 3 4 5

풀이 시간을 15분만 준 것처럼, sorted만 이해하고 있으면 어려운 문제는 아니었던 것 같다.
Leave a comment