알고리즘/백준저지
백준저지 10989번 수 정렬하기 3
anott
2021. 9. 1. 23:30
출처: https://www.acmicpc.net/problem/10989
10989번: 수 정렬하기 3
첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.
www.acmicpc.net
제출 날짜: 2021년 9월 1일 수요일
생각
문제의 메모리 제한이 8MB라고 적혀 있어서 더이상 못 풀고 있었는데 하단에 자바11은 512MB라고 적혀 있어서 다시 시도하게 되었다.
처음에는 그냥 입력을 쭉 받고 Arrays.sort()를 해서 통과했다. 그런데 다른 사람들 코드와 시간 차이가 많이 나서 확인해보니 대부분 카운팅 정렬을 쓰고 있었다. 입력 개수는 많지만 수는 10000 이하이기 때문에 가능한 방식이었다.
첫번째 코드 - Arrays.sort() 사용
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
int[] numArr = new int[N];
for (int i = 0; i < N; i++) {
numArr[i] = Integer.parseInt(br.readLine());
}
Arrays.sort(numArr);
for (int i = 0; i < N; i++) {
bw.write(numArr[i] + "\n");
}
bw.flush();
bw.close();
}
}
두번째 코드 - Counting Sort 사용
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
int[] numArr = new int[10001];
for (int i = 0; i < N; i++) {
int n = Integer.parseInt(br.readLine());
numArr[n]++;
}
for (int i = 1; i < 10001; i++) {
for (int j = 0; j < numArr[i]; j++) {
bw.write(i + "\n");
}
}
bw.flush();
bw.close();
}
}