백준 10989번 (수 정렬하기 3, C++) [BAEKJOON]

수 정렬하기 3

https://www.acmicpc.net/problem/10989

시간 제한메모리 제한제출정답맞힌 사람정답 비율
5 초8 MB209707487173686623.513%

문제

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

입력

첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다.

둘째 줄부터 N개의 줄에는 수가 주어진다.

이 수는 10,000보다 작거나 같은 자연수이다.

출력

첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

예제 입력 1

10
5
2
3
1
4
2
3
5
1
7

예제 출력 1

1
1
2
2
3
3
4
5
5
7

출처

  • 문제를 만든 사람: baekjoon
  • 데이터를 추가한 사람: cgiosy
  • 문제의 오타를 찾은 사람: joonas

비슷한 문제

알고리즘 분류


메모리 초과

아무 생각 없이 N의 최대값만큼 배열을 선언하고 정렬하여 출력하려고 했다.

제출하고 보니 메모리 초과….응?

문제를 확인해보니 메모리 제한이 8MB이다…!

#include <iostream>
#include <algorithm>

using namespace std;

int arr[10000001];

int N;

int main()
{
	cin >> N;
	int temp = 0;
	while (temp < N ) {
		cin >> arr[temp];
		temp++;
	}

	sort(arr, arr + N);

	for (int i = 0; i < N; i++) {
		cout << arr[i] << "\n";
	}

	return 0;
}

시간 초과

메모리가 너무 적으니 다른 방법을 생각했다.

주어지는 수는 최대값이 10,000보다 작은 자연수

해당 크기만큼 배열을 선언하고 배열의 인덱스 수가 나오면 해당 배열의 값을 1 추가하는 방법이다.

만약 i 가 나온다면 arr[i]++ <= 카운트하고 값만큼 그 인덱스를 출력해주는 방법

#include <iostream>

using namespace std;

int arr[10001];

int N, temp;

int main()
{
	cin >> N;
	while (N-- > 0) {
		cin >> temp;
		arr[temp]++;
	}

	for (int i = 1; i <= 10000; i++) {
		for (int j = 0; j < arr[i]; j++) {
			cout << i << "\n";
		}
	}

	return 0;
}

아무리 생각해도 이것보다 빠를 순 없을 텐데… 시간 초과…

이것저것 시험해 보다가 해결이 안 돼서 다른 글들을 찾아보았다.

결과적으로 입력과 출력의 문제였다. cin / cout

https://stackoverflow.com/questions/31162367/significance-of-ios-basesync-with-stdiofalse-cin-tienull <- 원글

https://jaimemin.tistory.com/1521 <- 퍼온곳

통과된 코드

ios_base::sync_with_stdio(false); 로 동기화를 풀어주자

#include <iostream>

using namespace std;

int arr[10001];

int N, temp;

int main()
{

	ios_base::sync_with_stdio(false); // 동기화를 비활성화
	// cin.tie(null); 코드는 cin과 cout의 묶음을 풀어줍니다.
	cin.tie(NULL);
	cout.tie(NULL);

	cin >> N;
	while (N-- > 0) {
		cin >> temp;
		arr[temp]++;
	}

	for (int i = 1; i <= 10000; i++) {
		if (arr[i] == 0) continue;

		for (int j = 0; j < arr[i]; j++) {
			cout << i << "\n";
		}
	}

	return 0;
}

아 빡쳐

“백준 10989번 (수 정렬하기 3, C++) [BAEKJOON]”에 대한 2개의 생각

  1. Hello there! Do you know if they make any plugins to assist with Search Engine Optimization? I’m trying to get my website to rank for some
    targeted keywords but I’m not seeing very good gains.
    If you know of any please share. Thanks!
    You can read similar article here: Blankets

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤