https://www.acmicpc.net/problem/2751
문제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
출력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
문제 풀이 및 코드
처음 풀 땐 정렬알고리즘을 버블정렬만 알고있어 풀지 못하다가 6개월이 지나고 정렬을 배운 후 재도전했다.
문제 옆에 O(nlogn) 정렬알고리즘을 사용하면 풀린다하여서 처음에 퀵정렬을 이용해 제출하였지만 시간초과가 났다.
이유는 퀵정렬의 최악의 경우 빅오는 O(n^2)이기에 난 것 같다. 그래서 두 번째 방법으로는 최선의 경우와 최악의 경우 빅오가 둘 다 O(nlogn)인 병합정렬로 제출해서 맞았다.
런타임 에러 (NZEC)
백준에는 C에서 void main을 사용하면 NZEC를 받을 수도 있다고 적혀 있다.
void 함수가 아무것도 리턴하지 않으니 code 0 자체도 출력하지 않아서라고 생각했다.
찾아보니까 프로그램이 단순하고, 코드의 마지막 줄에 도달하기 전에 종료되지 않거나, 코드에 오류가 없는 경우 void main()을 사용할 수 있다고 한다. 그러나 exit() 메서드를 사용하여 프로그램을 종료하기 위해서는 정수 값을 반환해야 한다고.
ANSI 표준은 'void main'을 잘못된 것으로 간주한다고 하니 다음부터는 int main을 사용해야겠다.
'알고리즘 > 백준' 카테고리의 다른 글
1439번 : 뒤집기 (0) | 2022.06.26 |
---|---|
10610번 : 30 (1) | 2022.06.22 |
1789번 : 수들의 합 (0) | 2022.06.22 |
10162번 : 전자레인지 (0) | 2022.06.22 |
5585번 : 거스름돈 (0) | 2022.06.22 |