문제를 확인해 봅시다. N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하라고 합니다.
https://www.acmicpc.net/problem/2750
푸는 방법이 여러 가지가 나올 수 있는 문제입니다. 일단 버블 정렬을 이용해 오름차순으로 정렬한 후 출력하는 코드를 작성해 보겠습니다.
아래는 버블 정렬에 관한 설명 글입니다.
2024.12.08 - [코딩 테스트] - 버블 정렬(Bubble_Sort)이란 무엇인가?
버블 정렬(Bubble_Sort)이란 무엇인가?
버블 정렬(Bubble SortSort)은 간단하지만 효율성이 떨어지는 정렬 알고리즘입니다. 버블 정렬을 한 마디로 정의하자면 “맨 뒤부터 정리하는 정렬” 혹은 “옆과 비교하여 왼쪽이 더 크면 좌우 교
arctis7p.tistory.com
"버블 정렬을 이용한 코드"
다음은 전체 코드와 그 해설입니다.
import sys
input = sys.stdin.readline
def bubble_sort(data):
for i in range(len(data)):
for j in range(0, len(data)-i-1):
if data[j] > data[j+1]:
data[j], data[j+1] = data[j+1], data[j]
return data
N = int(input())
data = []
for _ in range(N):
data.append(int(input()))
print(*bubble_sort(data))
- 모듈 임포트와 입력 설정
import sys input = sys.stdin.readline
- 'sys’ 모듈을 임포트하여 ‘stdin.readline’을 사용하여 입력을 받습니다. 이 방법은 입력을 더 효율적으로 처리할 수 있습니다. 추가적인 설명을 원하신다면 아래 링크로 가시면 되겠습니다.
- 2024.12.08 - [코딩 테스트] - sys.stdin.readline()으로 입력 속도 높이기: 개행문자 처리부터 주의사항까지
- 버블 정렬 함수
def bubble_sort(data): for i in range(len(data)): for j in range(0, len(data)-i-1): if data[j] > data[j+1]: data[j], data[j+1] = data[j+1], data[j] return data
- 외부 루프
- for i in range(len(data)):에서 range(len(data))는 0부터 len(data)-1까지의 숫자를 생성하므로, 루프는 정확히 len(data)번 실행됩니다. 여기서 len(data)는 배열의 길이입니다.
- 내부 루프
- for j in range(0, len(data)-i-1):는 각 외부 루프 반복마다 len(data)-i-1번 비교합니다. 이미 정렬된 부분(마지막 부분)을 제외하여 비교 범위를 줄입니다.
- 요소 비교와 교체
- if data[j] > data[j+1]:는 인접한 두 요소를 비교하여 더 큰 요소를 오른쪽으로 이동시킵니다.
- data[j], data[j+1] = data[j+1], data[j]는 실제 교체를 수행합니다.
- 함수 반환
- 정렬된 배열을 반환합니다.
- 외부 루프
- 입력받기
N = int(input()) data = [] for _ in range(N): data.append(int(input()))
- 배열 길이 입력
- ‘N = int(input())’은 배열의 길이를 입력받습니다.
- int()함수는 문자열을 숫자열로 변환할 때 자동으로 앞뒤의 공백과 개행문자(\n)를 제거합니다. 따라서 rstrip()을 사용할 필요가 없습니다.
- 배열 데이터 입력
- ‘for _ in range(N):’은 ‘N’번 반복하여 각 요소를 입력받고, ‘data’ 리스트에 추가합니다.
- 배열 길이 입력
- 출력
print(*bubble_sort(data))
- 정렬된 배열 출력
- bubble_sort() 함수를 호출하여 정렬된 배열을 반환받고, *을 사용하여 요소를 공백으로 구분하여 출력합니다.
- *는 언패킹 연산자로, 리스트의 각 요소를 개별 인자로 print() 함수에 전달합니다.
- 정렬된 배열 출력
다음 글은 알고리즘 사용이 아닌 리스트의 메서드인 sort()를 사용한 풀이 방법입니다.
'백준 문제풀이' 카테고리의 다른 글
[백준] 1427번 소트인사이드 - Python(2편) (0) | 2024.12.09 |
---|---|
[백준] 1427번 소트인사이트 - Python(1편) (0) | 2024.12.09 |
[백준] 11399번 ATM - Python(2편) (2) | 2024.12.09 |
[백준] 11399번 ATM - Python(1편) (2) | 2024.12.09 |
[백준] 2750번 수 정렬하기 - Python(2편) (0) | 2024.12.09 |