728x90
자바로 효율적인 정렬 구현하기: 백준 2751번 문제를 통해 배우는 최적화 전략
안녕하세요, 개발자 여러분! 오늘은 알고리즘 문제 중 하나인 백준 2751번 "수 정렬하기 2"를 풀어보며 자바로 효율적인 정렬 알고리즘을 구현해보겠습니다. 이 포스트에서는 문제의 조건과 코드 작성 과정을 단계별로 설명하고, 최적화를 위한 몇 가지 팁을 공유하겠습니다.
문제 소개
백준 2751번 문제는 다음과 같은 조건 하에 주어진 수를 오름차순으로 정렬하는 것입니다.
- 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다.
- 둘째 줄부터 N개의 줄에 정수가 주어진다.
- 출력은 주어진 수를 오름차순으로 정렬하여 한 줄에 하나씩 출력해야 한다.
- 이 조건을 만족하면서도 2초 이내에 처리할 수 있어야 합니다.
이렇게 어려운 조건 속에서 우리의 목표는 효율적인 정렬 알고리즘을 구현하는 것입니다.
코드 구현
다음은 문제를 해결하기 위한 자바 코드입니다.
package com.baek.algo.step12;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Q2751 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(bf.readLine());
List<Integer> list = new ArrayList<Integer>();
for(int i = 0; i < n; i++) {
list.add(Integer.parseInt(bf.readLine()));
}
Collections.sort(list);
for(int num : list) {
sb.append(num).append("
");
}
System.out.println(sb);
bf.close();
}
}
코드 설명
- 입력 처리:
BufferedReader
를 사용하여 빠르게 입력을 받습니다.List<Integer>
를 사용하여 입력된 숫자를 저장합니다. - 정렬:
Collections.sort()
를 사용하여 리스트를 정렬합니다. 이 메소드는 병합 정렬 및 삽입 정렬을 혼합한 알고리즘을 사용하여 평균적으로 O(n log n)의 속도를 보장합니다. - 출력 처리:
StringBuilder
를 사용하여 정렬된 결과를 한 번에 출력합니다.System.out.println()
대신StringBuilder
를 사용하는 이유는 출력 성능을 높이기 위함입니다.
최적화 팁
이 문제를 해결하는 과정에서 몇 가지 최적화 전략을 적용했습니다. 예를 들어, 표준 입력 및 출력 대신 BufferedReader
와 StringBuilder
를 사용하여 성능을 극대화했습니다. 이렇게 하면 대량의 데이터 처리 시 성능 차이를 확연히 느낄 수 있습니다.
결과 및 마무리
해당 코드를 실행하면 주어진 숫자 리스트가 오름차순으로 정렬되어 출력됩니다. 많은 수를 처리하면서도 2초 이내에 결과를 출력할 수 있었습니다.
이제 여러분들도 다양한 알고리즘 문제를 풀면서 코드 최적화에 대해 고민해보세요. 프로그래밍 연습을 통해 효율적인 알고리즘을 구현하는 재미를 느끼실 수 있을 것입니다. 질문이 있거나 추가적인 도움이 필요하시다면 댓글로 남겨주세요. 감사합니다!
728x90
'개발' 카테고리의 다른 글
Java를 이용한 덩치 등수 계산기 만들기 (0) | 2024.11.13 |
---|---|
자바로 자연수의 생성자 찾기 프로그램 만들기 (0) | 2024.11.13 |
버블 정렬 알고리즘으로 오름차순 정렬 구현하기 (2) | 2024.11.13 |
Spring Boot와 JPA로 데이터 등록하기: 단계별 가이드 (2) | 2024.11.13 |
자바에서 추상 클래스와 인터페이스의 차이점 이해하기 (0) | 2024.11.13 |