문제 링크 : https://www.acmicpc.net/problem/2751
알고리즘을 직접 구현한다면 쉽지않은 문제겠지만
java api를 사용한다면 그렇게 어려운 문제는 아니다.
하지만 백준에서 이런 문제를 넣은건 시간복잡도에 대해서도 고민하면서 문제를 풀라고 충고를 하는게 아닐까?
문제 자체는 https://pilming.tistory.com/5?category=933966
문제와 동일하지만 차이점은 주어진 수의 갯수가 많아졌다 그만큼 연산횟수도 늘어나겠지
보통 cpu는 초당 1억번의 연산을 한다고 가정하면 된다고한다.
그런의미에서 위의 내 글에서 말한것처럼 Arrays.sort() 는 평균적으로 NlogN의 시간복잡도를 갖기때문에
주어진 수로 계산해보면 1000000 * log1000000 하면 6백만으로 시간제한인 2초안에 충분하지만
Arrays.sort() 는 평균적으로 NlogN이고 최악의 경우 N^2 의 시간복잡도를 갖기때문에
아마 백준에서 최악의 경우 테스트케이스 있는것같다.
최악의 경우 1000000^2 = 1조 번의 연산이 필요하기때문에 시간제한인 2초로는 불가능하다.
그래서 여러가지 대안이 있겠지만 내가 사용한건 Collections.sort() 이다.
이건 정렬알고리즘으로 Tim Sort를 사용하기땜문에 이건 최악의 경우에도 NlogN의 시간복잡도를 갖는다
import java.io.*;
import java.util.*;
public class Main {
static FastReader scan = new FastReader(); // 입력
static StringBuilder sb = new StringBuilder(); //제출답안
static int N;
static ArrayList<Integer> list;
static void input() { //입력함수
N = scan.nextInt();
list = new ArrayList<>();
for(int i =0; i < N; i++) {
list.add(scan.nextInt());
}
}
public static void main(String[] args) {
input(); // 입력
//Arrays.sort(list);
Collections.sort(list);
for(int i = 0; i < N; i++) {
sb.append(list.get(i));
sb.append('\n');
}
System.out.println(sb.toString());
}
//류호석 강사님 템플릿
static class FastReader {
BufferedReader br;
StringTokenizer st;
public FastReader() {
br = new BufferedReader(new InputStreamReader(System.in));
}
public FastReader(String s) throws FileNotFoundException {
br = new BufferedReader(new FileReader(new File(s)));
}
String next() {
while (st == null || !st.hasMoreElements()) {
try {
st = new StringTokenizer(br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt() {
return Integer.parseInt(next());
}
long nextLong() {
return Long.parseLong(next());
}
double nextDouble() {
return Double.parseDouble(next());
}
String nextLine() {
String str = "";
try {
str = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return str;
}
}
}
'알고리즘' 카테고리의 다른 글
JAVA 백준2470 두 용액(BOJ2470) (0) | 2022.03.13 |
---|---|
JAVA 백준1015 수열 정렬(BOJ1015) (0) | 2022.03.13 |
JAVA 백준2750 수 정렬하기(BOJ2750) (0) | 2022.03.12 |
JAVA 백준10825 국영수(BOJ10825) (0) | 2022.03.12 |
JAVA 백준2529 부등호(BOJ2529) (0) | 2022.03.12 |