본문 바로가기

C++/백준

[C++][백준] [정렬] 10989 수 정렬하기 3

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

 

10989번: 수 정렬하기 3

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

www.acmicpc.net

문제

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

 

풀이

단순한 정렬문제지만 메모리 초과 때문에 고민을 했던 문제이다.

처음에는 삽입정렬을 시도했지만 메모리 초과가 떠서 더 단순한 방법을 생각해보았다.

그래서 수를 입력받고 그 수에 해당하는 배열 arr을 1씩 더해준다.

그리고 for문을 돌려서 1부터 10000까지 arr 배열의 값대로 반복하며 그 수를 출력한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <stdlib.h>
 
int main(){
    int N, num;
    scanf("%d"&N);
 
    int arr[10001= {0};
    for(int i=0; i<N; i++){
        scanf("%d"&num);
        arr[num]+=1;
    }
 
    for(int i=1 ; i<=10000; i++)
        for (int j = 0; j < arr[i]; j++)
            printf("%d\n",i);
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 

'C++ > 백준' 카테고리의 다른 글

[C++][백준] 11021 A+B - 7  (0) 2020.03.12
[C++][백준] 10998 A×B  (0) 2020.03.12
[C++][백준] 10952 A+B - 5  (0) 2020.03.12
[C++][백준] 10951 A+B - 4  (0) 2020.03.12
[C++][백준] 10950 A+B - 3  (0) 2020.03.12