문제
리뷰
계수정렬(Counting sort) 를 써야 풀리는 문제다.
각 숫자의 개수를 배열 c에 저장한다. 입력받는 숫자는 10,000보다 작거나 같은 자연수이다.
배열 c는 10001 로 크기를 잡는다.
int N, num;
int c[10001]; // 개수를 저장할 배열
for(int i = 1; i <= N; i++){ // 1. 각 숫자의 개수를 센다
scanf("%d", &num);
c[num]++;
}
개수를 센 만큼 숫자 i를 출력 한다.
0개면 출력할 필요 없으니까, 1개 이상인 경우만 출력한다.
for(int i = 1; i < 10001; i++){ // 2. 개수만큼 i를 출력
if(c[i]){ // 개수 1이상이면 출력
for(int j = 0; j < c[i]; j++){
printf("%d ", i);
}
}
}
맞은 코드
#include <iostream>
#include <algorithm>
using namespace std;
int N, num;
int c[10001]; // 개수를 센다
int main(void){
scanf("%d", &N);
for(int i = 1; i <= N; i++){ // 1. 각 숫자의 개수를 센다
scanf("%d", &num);
c[num]++;
}
for(int i = 1; i < 10001; i++){ // 2. 개수만큼 i를 출력
if(c[i]){ // 개수 1이상이면 출력
for(int j = 0; j < c[i]; j++){
printf("%d ", i);
}
}
}
return 0;
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
분해합 백준 2231번 c++ (0) | 2020.10.07 |
---|---|
소트인사이드 백준 1427번 (0) | 2020.10.02 |
팰린드롬수 백준 1259번 (0) | 2020.10.02 |
체스판 다시 칠하기 백준 1018번 (0) | 2020.10.02 |
골드바흐 파티션 백준 17103번 (0) | 2020.10.02 |