난이도: ●○○ | 풀이 시간: 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만 이해하고 있으면 어려운 문제는 아니었던 것 같다.


Discover more from Iridescent Seraphim

Subscribe to get the latest posts sent to your email.

Posted in

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.