이 문제는 그냥 내장 함수를 사용하면 된다. 괜히 내가 정렬함수를 구현하는 것보다 훨씬 빠르고 노력도 덜 든다.
그런데 문제는 그래도 시간초과가 난다는 것이다.
endl 대신 '\n'을 쓰고
cin.tie(NULL);
ios_base::sync_with_stdio(false);
이 코드를 추가해서 시간을 줄였다.
그리고 sort 함수는 <algorithm>에 있는 sort 함수를 사용했다.
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int n;
cin >> n;
int* arr = new int[n];
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
sort(arr, arr + n);
for (int i = 0; i < n; i++) {
cout << arr[i] << '\n';
}
return 0;
}
결과는 288ms로 성공
역시 C++은 빠르다.
그래서 파이썬으로는 어디까지 해야 시간초과가 안 나고 어디서부터 시간초과가 나는지 테스트 해봤다.
일단은 가장 무난한 코드인
n = int(input())
li = []
for i in range(n):
li.append(int(input()))
li.sort()
for i in li:
print(i)
이렇게 내봤더니 당연히 시간초과가 떴다.
그래서 출력시간을 줄인 이 코드로 다시 제출해봤다.
n = int(input())
li = [0] * n
for i in range(n):
li[i] = int(input())
s = ""
li.sort()
for i in li:
s += (str(i) + '\n')
print(s)
그래도 시간초과가 났다.
그래서 이번에는 sys.stdin.readline() 함수로 입력 받는 시간도 줄여봤다.
n = int(input())
li = [0] * n
from sys import stdin
for i in range(n):
li[i] = int(stdin.readline())
s = ""
li.sort()
for i in li:
s += (str(i) + '\n')
print(s)
그리고 이번에는 str(i) + '\n'과 "{}\n".format(i) 중에 뭐가 더 빠른지 테스트하기 위해서 이렇게 코드를 제출해봤다.
n = int(input())
li = []
from sys import stdin
for i in range(n):
li.append(int(stdin.readline()))
li.sort()
s = ""
for i in li:
s += "{}\n".format(i)
print(s)
아까 str(i) + '\n'을 사용해서 출력했을 때에는 1444ms였는데 "{}\n'.format(i)를 이용해서 출력하니까 더 느렸다.
C++은 288ms가 나오는데 파이썬은 1444ms가 최선인 것을 보고 다시 한번 C++이 빠르다는 것을 새삼 느끼고 간다.
'알고리즘 문제' 카테고리의 다른 글
[백준] 2193번 이친수 (0) | 2020.01.31 |
---|---|
[백준] 1193번 분수찾기 (0) | 2020.01.31 |
[백준] 10828번 스택 (0) | 2020.01.31 |
[백준] 10814번 나이순 정렬 (0) | 2020.01.30 |
[백준] 1978번 소수 찾기 (0) | 2020.01.30 |