출처: 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();
}
}
'알고리즘 > 백준저지' 카테고리의 다른 글
백준저지 12927번 배수 스위치 (0) | 2021.09.03 |
---|---|
백준저지 14889번 스타트와 링크 (0) | 2021.09.02 |
백준저지 2669번 직사각형 네개의 합집합의 면적 구하기 (0) | 2021.08.30 |
백준저지 10163번 색종이 (0) | 2021.08.29 |
백준저지 15656번 N과 M (7) (0) | 2021.08.28 |