작심 24/7

[백준] 10989번 수 정렬하기 3 본문

백준

[백준] 10989번 수 정렬하기 3

모닝수박 2020. 5. 22. 16:15
 

10989번: 수 정렬하기 3

첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.

www.acmicpc.net

계차수열을 이용하는 문제이다. 그러나 그냥 cin cout을 써서 제출하면 시간 초과가 걸린다.

printf로 바꾸면 되지만 c++ 입출력을 그대로 쓸 거라면

 

ios_base::sync_with_stdio(false);

-> C 표준 stream과 C++ 표준 stream의 동기화를 끊는다. (c, c++ 입출력 섞어 쓰기 안됨)

-> C++ stream은 독립적인 버퍼를 갖게 된다.

=> 사용하는 버퍼의 수 줄어들어 실행 속도 향상

 

cin.tie(NULL);

-> cin을 cout으로부터 untie한다.

-> stream을 untie하면 output이 flush되지 않은 채로 user에게 입력을 요구

=> 입출력 stream 버퍼를 모두 확인하는 과정을 거치지 않아 실행 속도 향상

 

이 두 가지를 추가해주면 해결된다.

#include <iostream>
using namespace std;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	int N, num, cnt[10000] = { 0 };
	cin >> N;

	for (int i = 0; i < N; i++) {
		cin >> num;
		cnt[num - 1]++;
	}

	for (int i = 0; i < 10000; i++) {
		while (cnt[i] != 0) {
			cout << i + 1 << "\n";
			cnt[i]--;
		}
	}

	return 0;
}

'백준' 카테고리의 다른 글

[백준] 10814번 나이순 정렬  (0) 2020.05.23
[백준] 2108번 통계학  (0) 2020.05.22
[백준] 11729번 하노이 탑 이동 순서  (0) 2020.05.20
[백준] 2447번 별 찍기 - 10  (2) 2020.05.20
[백준] 1002번 터렛  (3) 2020.05.20
Comments