21.08.22 기록
백준 알고리즘 10989 풀이
🎆나의 풀이(메모리 337MB, 시간 1.76s로 통과)
-이 문제 역시 카운팅 정렬 응용 방법으로 풀었다. 중복값을 체크하기 위해 boolean 대신 int형 배열을 사용했다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class B2751 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] numbers = new int[10000 + 1];
for(int i = 0; i < N; i++) {
numbers[Integer.parseInt(br.readLine())]++;
}
StringBuilder sb = new StringBuilder();
for(int i = 0; i < numbers.length; i++) {
if(numbers[i] > 1) { //중복으로 카운트 된 경우
for(int j = 0; j < numbers[i]; j++) { //중복 수 만큼 append
sb.append(i).append("\n");
}
}
if(numbers[i] == 1) { //한 번만 카운트 된 경우 바로 append
sb.append(i).append("\n");
}
}
System.out.println(sb);
}
}
🎆해설(메모리 337MB, 시간 1.77s로 통과)
-해설 역시 같은 로직으로 풀이했다. 대신 출력부분에서 while문을 사용하셨다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class B10989 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] numbers = new int[10000 + 1];
for(int i = 0; i < N; i++) {
numbers[Integer.parseInt(br.readLine())]++;
}
StringBuilder sb = new StringBuilder();
for(int i = 1; i < numbers.length; i++) {
while(numbers[i] > 0) {
sb.append(i).append("\n");
numbers[i]--;
}
}
System.out.println(sb);
}
}