문제
https://www.acmicpc.net/problem/10989
10989번: 수 정렬하기 3
첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.
www.acmicpc.net
풀이
굉장히 쉬운 정렬 문제인 줄 알고 그냥 들이댔다가 큰코다쳤다.
메모리 초과가 뜬 걸 보고 문제를 다시 천천히 읽었다. N이 10,000,000까지 가능하다.
이를 전부 입력받고 sort()하면 메모리가 남아나질않음을 인지했어야 했다.
다시 문제를 처음으로 돌아가 result배열에 한 칸씩 카운트를 늘려주는 방식으로 풀었다. (입력 숫자는 10000 이하이므로)
좋은 문제 같다.
코드
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int result[10001];
int N;
int main() {
//단순하게 sort()로 풀면 메모리초과 (공간복잡도)
//입력값을 전부 저장하면 메모리 초과 (10,000,000)
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> N;
for (int i = 0; i < N; i++) {
int a;
cin >> a;
result[a]++;
}
//탐색
for (int j = 0; j < 10001; j++) {
for (int k = 0; k<result[j];k++){
if (result[j] == 0) break;
else{
cout << j << '\n';
}
}
}
return 0;
}
'알고리즘 공부 > 백준' 카테고리의 다른 글
[백준] 좌표 정렬하기 (11650/C++) (0) | 2022.01.23 |
---|---|
[백준] 덩치 (7568/C++) (0) | 2022.01.23 |
[백준] 나이순 정렬 (10814/C++) (0) | 2022.01.22 |
[백준] 균형잡힌 세상 (4949/C++) (0) | 2022.01.22 |
[백준] 설탕 배달 ( 2839 / C++) (0) | 2022.01.20 |