파이썬 코딩테스트 강좌, 수 정렬하기 1

안녕하세요! 이번 포스팅에서는 알고리즘 시험 준비를 위한 문제로 ‘수 정렬하기 1’을 다뤄보겠습니다. 이 문제는 간단한 정렬 알고리즘의 이해를 돕고, 코딩 테스트에서 자주 다뤄지는 주제 중 하나입니다. 그러면 문제를 살펴보도록 하겠습니다.

문제 설명

문제는 다음과 같습니다:


N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

입력으로는 첫째 줄에 수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어집니다. 둘째 줄부터 N개의 줄에 걸쳐서 수가 주어집니다. 수는 절댓값이 1,000,000보다 작거나 같은 정수입니다.

입력 예시


5
5
4
3
2
1

출력 예시


1
2
3
4
5

문제 해결 과정

이 문제를 해결하기 위해서는 입력된 수를 오름차순으로 정렬해야 합니다. 정렬하는 문제는 다양한 알고리즘이 있지만, Python의 경우 내장 함수를 활용하여 손쉽게 해결할 수 있습니다.

1단계: 입력 처리

먼저, 표준 입력을 통해 데이터를 받아옵니다. N개의 수를 입력받고 리스트에 저장합니다. 이를 위해 sys.stdin.read를 사용하여 여러 줄의 입력을 한 번에 읽어올 수 있습니다.

import sys
input = sys.stdin.read

data = input().split()
N = int(data[0])
numbers = [int(data[i]) for i in range(1, N + 1)]

2단계: 정렬하기

그 다음, 리스트에 저장된 숫자를 정렬합니다. Python에서는 sort() 메소드 또는 sorted() 함수를 이용할 수 있습니다. 두 방법 모두 Timsort 알고리즘을 기반으로 하여 평균 O(N log N)의 성능을 자랑합니다.

numbers.sort()  # 리스트 자체를 정렬
# 또는
sorted_numbers = sorted(numbers)  # 새로운 리스트를 반환

3단계: 출력하기

마지막으로, 정렬된 숫자를 한 줄씩 출력합니다. 반복문을 사용하여 각 숫자를 출력할 수 있습니다.

for num in numbers:
    print(num)

전체 코드

이제 전체적으로 다듬으면 다음과 같은 코드가 완성됩니다:

import sys

# 입력 읽기
input = sys.stdin.read
data = input().split()

# 첫 줄에서 N을 얻고, 나머지 수를 리스트에 저장
N = int(data[0])
numbers = [int(data[i]) for i in range(1, N + 1)]

# 정렬하기
numbers.sort()

# 결과 출력
for num in numbers:
    print(num)

결론

‘수 정렬하기 1’ 문제는 간단하지만 정렬 알고리즘에 대한 이해를 요하는 문제입니다. Python의 강력한 내장 기능을 활용하면 매우 쉽게 문제를 해결할 수 있습니다. 이러한 간단한 문제부터 시작하여 체계적으로 알고리즘을 공부해나가는 것이 중요합니다.

이번 포스팅을 통해 정렬 문제 해결 과정과 Python의 유용한 기능에 대해 알아보았습니다. 다음 포스팅에서는 더 복잡한 알고리즘 문제로 찾아뵙도록 하겠습니다. 감사합니다!