알고리즘
백준 16212 정열적인 정렬
킨글
2024. 7. 24. 20:57
설명
단순히 sort로도 풀 수 있는 문제이지만, 다른 방식으로 좀 더 빠르게 풀어보고 싶었다.
그래서 음수와 양수 각각 배열을 선언해주고, 해당 배열에 값을 추가한 후 1번 인덱스부터 돌면서 처리했다.
결국 sort보다 빠르게 처리할 수 있었다.
코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
// 16212
public static void main(String[] args) throws IOException {
process();
}
private static void process() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int length = 2000001;
int[] arr_plus = new int[length];
int[] arr_minus = new int[length];
int zeroCnt = 0;
for (int i = 0; i < N; i++) {
int num = Integer.parseInt(st.nextToken());
if(num > 0) {
arr_plus[num]++;
} else if(num == 0) {
zeroCnt++;
} else {
arr_minus[-num]++;
}
}
for (int i = 2000000; i > 0; i--) {
if(arr_minus[i] > 0) {
for (int j = 0; j < arr_minus[i]; j++) {
bw.write("-" + i + " ");
}
}
}
for (int i = 0; i < zeroCnt; i++) {
bw.write("0 ");
}
for (int i = 1; i < length; i++) {
if(arr_plus[i] > 0) {
for (int j = 0; j < arr_plus[i]; j++) {
bw.write(i + " ");
}
}
}
bw.flush();
bw.close();
br.close();
}
}