728x90
 

2751번: 수 정렬하기 2

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

www.acmicpc.net

이 문제는 그냥 내장 함수를 사용하면 된다. 괜히 내가 정렬함수를 구현하는 것보다 훨씬 빠르고 노력도 덜 든다.

그런데 문제는 그래도 시간초과가 난다는 것이다.

 

[C++] 백준 시간초과 문제 해결 입출력 속도 향상

cin과 count을 사용한다면 cin.tie(NULL); ios::sync_with_stdio(false) 이 코드를 추가해주면 속도가 향상된다.

breakcoding.tistory.com

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++이 빠르다는 것을 새삼 느끼고 간다.

728x90

'알고리즘 문제' 카테고리의 다른 글

[백준] 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

+ Recent posts