백준BOJ/Java/Python : 2751번 : 수 정렬하기 2

2751번 : 수 정렬하기 2 원본

알고리즘 분류

  • 정렬

문제

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

입력

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

출력

첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

풀이

  • Collections.sort() 함수 [JAVA]
    평균 시간 복잡도가 O(N^2)인 반복문 작성이나 최악의 경우가 O(N^2)인 Array.sort()로는 시간 초과로 실패 처리 되었다.
    모든 경우의 시간 복잡도가 O(NlogN)인 함수를 사용해 해결할 수 있는 문제이다.
    Collections.sort()의 경우 Insertion Sort(삽입 정렬)과 Merge Sort(병합 정렬)을 합친 Tim Sort 방식의 함수이다.
    Collections.sort()는 시간 복잡도 면에서 Array.sort()보다 좋으나, 공간 복잡도 면에서는 Collections.sort()는 객체를 추가하면서 정렬하기 때문에 배열 크기 내에서 정렬하는 Array.sort()보다 좋지 못하다고 한다.

소스 코드

Java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;

public class Baek2751 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        ArrayList<Integer> list = new ArrayList<>();
        int num = Integer.parseInt(br.readLine());
        for (int i = 0; i < num; i++) {
            list.add(Integer.parseInt(br.readLine()));
        }
        
        Collections.sort(list);

        for(Integer c : list) {
            sb.append(c).append("\n");
        }
        
        System.out.println(sb);
    }
}
  • sys.stdin / sys.stdout [Python]
    sys 라이브러리에 있는 두 함수를 이용해 입/출력 속도를 빠르게 한다.
Python
import sys

num = int(input())
list = []

for i in range(num):
    list.append(int(sys.stdin.readline()))

for i in sorted(list):
    sys.stdout.write(str(i)+'\n')

참고

Tim sort에 대해 알아보자 Arrays.sort() 와 Collections.sort() 의 차이

이 글이 도움이 되었나요?

0 minutes ago
작성된 댓글이 없습니다. 첫 댓글을 달아보세요!
    댓글을 작성하려면 로그인이 필요합니다.