728x90
https://www.acmicpc.net/problem/2750
2750번: 수 정렬하기
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
www.acmicpc.net
이번 문제는 정렬 알고리즘 선택의 자유가 있는 문제였다.
자바 API에서 제공하는 Arrays.sort 메서드를 사용해도 되고, quick sort, bubble sort 등등을 사용해도 된다.
나는 그 중 counting sort 방법을 사용하였다.
counting sort 개념은 정말 간단하다.
N개의 수가 주어질 때, N 만큼 반복문을 돌리며 각 값이 나올 때마다 해당 값을 index로 하는 배열의 값을 1만큼 증가시켜주면 된다.
오름차순으로 정렬하고 싶다면, 각 값을 인덱스로 저장한 배열을 0부터 차례로 출력하면 쉽게 정렬된다.
단, 음수의 경우 음수는 인덱스 값으로 설정할 수 없기 때문에 값의 최대 범위만큼 더하는 방식으로 처리한다.
이 문제의 경우 최대값이 1000이기 때문에, 값을 저장할 때 1000을 더한 값을 저장하고 출력할 땐 1000을 빼고 출력한다.
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));
StringBuilder sb = new StringBuilder();
int number = Integer.parseInt(br.readLine());
int[] countingSort = new int[2001];
for (int i = 0; i < number; i++) {
countingSort[Integer.parseInt(br.readLine()) + 1000]++;
}
for (int i = 0; i < 2001; i++) {
if (countingSort[i] > 0) {
sb.append(i - 1000).append("\n");
countingSort[i]--;
}
}
System.out.println(sb);
br.close();
}
}
'백준 > 정렬' 카테고리의 다른 글
BOJ 2108 - 통계학 (0) | 2022.11.08 |
---|---|
BOJ 10989 - 수 정렬하기3 (0) | 2022.11.08 |
BOJ 2751 - 수 정렬하기2 (0) | 2022.11.08 |
BOJ 25305 - 커트라인 (0) | 2022.11.07 |
BOJ 2587 - 대표값2 (0) | 2022.11.07 |