# 문제 출제 사이트
https://www.acmicpc.net/problem/2751
# 문제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
# 입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다.
둘째 줄부터 N개의 줄에는 수가 주어진다.
이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다.
수는 중복되지 않는다.
# 출력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
# 제출한 소스코드
더보기
1. 선택정렬을 사용한 소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] numArr = new int[n];
for (int i = 0; i < n; i++) {
numArr[i] = Integer.parseInt(br.readLine());
}
selectionSort(numArr);
for ( int num : numArr ) {
System.out.println(num);
}
}
public static void selectionSort(int[] numArr) {
for ( int i = 0; i < numArr.length; i++ ) {
int minIndex = i;
for ( int j = i + 1; j < numArr.length; j++ ) {
if (numArr[minIndex] > numArr[j]) {
minIndex = j;
}
}
int tempNum = numArr[i];
numArr[i] = numArr[minIndex];
numArr[minIndex] = tempNum;
}
}
}
2. 퀵정렬을 사용한 소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] numArr = new int[n];
for (int i = 0; i < n; i++) {
numArr[i] = Integer.parseInt(br.readLine());
}
quickSort(numArr);
printArray(numArr);
}
public static void quickSort(int[] numArr) {
quickSort(numArr, 0, numArr.length - 1);
}
public static void quickSort(int[] numArr, int start, int end ) {
int part2 = partition(numArr, start, end);
if ( start < part2 - 1 ) {
quickSort(numArr, start, part2 - 1);
}
if ( part2 < end ) {
quickSort(numArr, part2, end);
}
}
public static int partition( int[] numArr, int start, int end ) {
int pivot = numArr[(start + end) / 2];
while ( start <= end ) {
while ( numArr[start] < pivot ) start++;
while ( numArr[end] > pivot ) end--;
if ( start <= end ) {
swap (numArr, start, end );
start++;
end--;
}
}
return start;
}
public static void swap(int[] numArr, int start, int end) {
int tempNum = numArr[start];
numArr[start] = numArr[end];
numArr[end] = tempNum;
}
public static void printArray(int[] numArr) {
for ( int num : numArr ) {
System.out.println(num);
}
}
}
3. Collections.Sort 를 사용한 소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
ArrayList<Integer> arrList = new ArrayList<>();
for (int i = 0; i < n; i++) {
arrList.add(Integer.parseInt(br.readLine()));
}
Collections.sort(arrList);
printArray(arrList);
}
public static void printArray(ArrayList<Integer> arrList) {
for ( int num : arrList ) {
System.out.println(num);
}
}
}
- List를 foreach문으로 바로 출력하면서 오류가 발생했다.
- 찾아보니 StringBuilder로 출력을 해줘야 시간초과가 발생하지 않는다고 한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
ArrayList<Integer> arrList = new ArrayList<>();
for (int i = 0; i < n; i++) {
arrList.add(Integer.parseInt(br.readLine()));
}
Collections.sort(arrList);
printArray(arrList);
}
public static void printArray(ArrayList<Integer> arrList) {
StringBuilder sb = new StringBuilder();
for ( int num : arrList ) {
sb.append(num + "\n");
}
System.out.println(sb.toString());
}
}
# 참고자료
- 블로그 Stranger's LAB => 링크
반응형