문제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
출력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
풀이
0. Scanner, StringBuilder 선언
1. 수의 개수 입력받기
2. ArrayList로 배열 생성
3. 수 입력받기
4. Collections를 이용해 정렬하기
5. StringBuilder에 문자열 저장
6. 결과 출력
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in); // 0
StringBuilder sb = new StringBuilder(); // 0
int N = scanner.nextInt(); // 1
ArrayList<Integer> arrayList = new ArrayList<>(); // 2
for(int i = 0; i < N; i++) { // 3
arrayList.add(scanner.nextInt());
}
Collections.sort(arrayList); // 4
for(int x : arrayList) sb.append(x).append("\n"); // 5
System.out.println(sb); // 6
}
}
배운 것
1. 출력할 때 StringBuilder 객체를 이용하면 System.out.print()보다 성능이 좋음
2. 문자열 저장하고 마지막에 한 번에 System.out.print()로 출력
3. Collections로 정렬
4. Collections 클래스는 여러 유용한 알고리즘을 구현한 메소드들을 제공
5. 자주 사용되는 알고리즘으로는 정렬(Sorting), 섞기(Shuffling), 탐색(Searching) 등
// StringBuilder 사용
StringBuilder sb = new StringBuilder(); // 생성
sb.append("abcdefg"); // 문자열 붙이기
sb.delete(3, 7); // "defg" 삭제 -> "abc"
sb.replace(0, 3, "가나다"); // "가나다"
sb.reverse(); // "다나가"
// Collections 사용
Collections.sort(List<T> list);