[백준/C++] 10989번 수 정렬하기 3
2021. 2. 3. 00:10ㆍ알고리즘/구현
728x90
반응형
문제: www.acmicpc.net/problem/10989
10989번: 수 정렬하기 3
첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.
www.acmicpc.net
문제풀이
처음 문제를 접근한 방식은 N 크기의 배열을 만든 후 sort() 함수를 이용해 배열을 정렬 후 출력하려고 했다.
하지만 문제가 요구하는 최대 메모리의 크기는 8MB이기 때문에 메모리 초과로 정답을 맞히지 못했다.
다시 문제를 살펴보고 입력되는 숫자가 "10,000보다 작거나 같은 자연수" 인 것을 확인하고 배열 인덱스를 이용하여 문제를 풀었다.
10,000 크기의 배열을 선언, 0으로 초기화한 후 입력되는 숫자를 인덱스로 가진 배열을 증가시켜 해당 숫자의 개수를 기록했다.
코드
#include <iostream>
using namespace std;
int main(){
ios::sync_with_stdio(false); cin.tie(NULL);
int N;
cin>>N;
int num;
int arr[10000] = {0,}; //10,000 크기 배열 0으로 초기화
for(int i=0; i<N; i++){
cin>>num;
arr[num-1]++; //입력되는 숫자를 인덱스로 가진 배열 증가
}
for(int i=0; i<10000; i++){
while(arr[i]--)
cout<<i+1<<"\n"; //개수만큼 출력
}
return 0;
}
결과
728x90
반응형
'알고리즘 > 구현' 카테고리의 다른 글
[백준/C++] 2108번 통계학 (0) | 2021.02.04 |
---|---|
[백준/C++] 2164번 카드2 (0) | 2021.02.03 |
[백준/C++] 1929번 소수 구하기 (0) | 2021.02.03 |
[백준/C++] 15829번 Hashing (0) | 2021.02.02 |
[백준/C++] 1966번 프린터큐 (1) | 2021.01.29 |