본문 바로가기
코테초보 코커두드

[코딩 초보의 탐구] 백준 2751번 : 수 정렬하기2 (자바)

by 코커두드 2023. 11. 8.

시와 - 꿈 속의 새

 

🎧 위 앨범은 시와님의 싱글 앨범, 꿈 속의 새 입니다. 자켓은 논센소 작가님이, 뮤비는 메타포아일랜드 경환님께서 제작을 하셨습니다. 또한 편곡은 카코포니님께서 담당하셨고요, 세션으로는 왼손 기타리스트 거누님이 참여하셨습니다. 굉장하죠?

포근한 밤을 보내고 싶어 이 곡을 골랐어요. 그러면 오늘의 문제 풀이, 시작해볼까요?

 

 

1. 문제 파악하기

출처 : 백준
출처 : 백준

 

✅ 브론즈 문제였던 수 정렬하기보다 수의 범위가 커졌습니다.

✅ 언어는 Java11로, Scanner가 아닌 BufferedReader를 사용했습니다.
✅ Java11로 Arrays.sort를 사용해서 테스트 해보니 결과는 '맞았습니다!'가 나왔으나, 채점 속도가 매우 느렸습니다.

    ➡ 위가 Arrays.sort, 아래가 Collection.sort 입니다.

    ➡ 비록 ms 단위이긴 하나 미미한 차이여도 속도 측면에서 Collection.sort가 나아보였습니다.

 

 

2. 탐구

✅ Collection.sort란 무엇인가?

 - ArrayList, LinkedList 등 List 계열을 정렬하는데 사용합니다. (일반적인 배열은 불가능)

 - 합병정렬보다 향상된 Tim sort를 수행합니다.  

 

✅ 추가 공부 : Tim Sort 에 대하여 공부하기

https://en.wikipedia.org/wiki/Timsort

 

Timsort - Wikipedia

From Wikipedia, the free encyclopedia Hybrid sorting algorithm based on insertion sort and merge sort Timsort is a hybrid, stable sorting algorithm, derived from merge sort and insertion sort, designed to perform well on many kinds of real-world data. It w

en.wikipedia.org

 

3. 풀이

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

// 수 정렬하기2 (실버5)
public class p2751 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        // 배열 크기 N 받음
        int N = Integer.parseInt(br.readLine());

        // List 만들기
        ArrayList<Integer> list = new ArrayList<>();

        // 입력받은 수를 list에 담기
        for (int i = 0; i < N; i++) {
            list.add(Integer.parseInt(br.readLine()));
        }


        Collections.sort(list);

        for (Integer value : list) {
            sb.append(value).append('\n');
        }
        
        System.out.println(sb);
    }
}

 

 

마무리

알고리즘은 재미있고, 정렬도 재미있지만 난이도가 높아질수록 시간복잡도를 고려해야 하니 생각할 것들이 많아지는 것 같아요. 그래도 재미있습니다. 지금은 새벽 2시가 넘은 시간이라 자러 갈게요. 안녕!

 
 

 

🚨 본 포스팅은 개인적인 학습 목적으로 작성되었습니다.

정확하고 날카로운 풀이를 원하시는 분들은 고수분들의 포스팅을 보시기를 권장드립니다.