본문 바로가기
백준 문제풀이

[백준] 2750번 수 정렬하기 - Python(1편)

by arctis7p 2024. 12. 8.

문제를 확인해 봅시다. 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))
  1. 모듈 임포트와 입력 설정
    import sys 
    input = sys.stdin.readline
  2. 버블 정렬 함수
    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]는 실제 교체를 수행합니다. 
    • 함수 반환
      • 정렬된 배열을 반환합니다.
  3. 입력받기
    N = int(input()) 
    data = [] 
    for _ in range(N): 
        data.append(int(input()))
    • 배열 길이 입력
      • N = int(input())’은 배열의 길이를 입력받습니다.
      • int()함수는 문자열을 숫자열로 변환할 때 자동으로 앞뒤의 공백과 개행문자(\n)를 제거합니다. 따라서 rstrip()을 사용할 필요가 없습니다.
    • 배열 데이터 입력
      • for _ in range(N):’은 ‘N’번 반복하여 각 요소를 입력받고, ‘data’ 리스트에 추가합니다. 
  4. 출력
    print(*bubble_sort(data))
    • 정렬된 배열 출력
      • bubble_sort() 함수를 호출하여 정렬된 배열을 반환받고, *을 사용하여 요소를 공백으로 구분하여 출력합니다. 
      • *는 언패킹 연산자로, 리스트의 각 요소를 개별 인자로 print() 함수에 전달합니다.

 

 

다음 글은 알고리즘 사용이 아닌 리스트의 메서드인 sort()를 사용한 풀이 방법입니다.