Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- TOPCIT 문제 유형
- 로블록스 script local script 차이
- TOPCIT 후기
- 백준 11726번 C++
- 백준 2225번 c++
- bfs
- 차이
- 코드
- 배열 stack overflow
- 프로그래머스 단체사진 찍기 C++
- long int 의 차이
- 유니티 Rigidbody 이동
- 유니티 LTS
- 1699번
- 백준 10844번 c++
- UML Diagram 정리
- 유니티 꿀팁
- 2644번
- 유니티
- 풀이
- 백준
- rigidbody.position
- c++
- rigidbody.Moveposition
- 프로그래머스 가장 큰 수 C++
- 플레이어 이동
- 백준 2193번 c++
- transform.position
- 백준 10799번 c++
- 백준 17299번 c++
Archives
- Today
- Total
Kiki Devlog
[10989번][실5] 수 정렬하기 3 (카운팅 정렬) 본문
728x90
카운팅 정렬을 사용하라고 했는데 뭔지 몰라서 찾아봄. 카운팅 정렬은 입력되는 숫자의 범위가 작을 때 유용.
카운딩 정렬이란?
숫자 범위만큼 배열을 만들고, 해당 숫자를 인덱스로 써서 숫자가 각각 몇번 나왔는지를 카운팅 함.
예를들어, 1112334445 라는 배열이 있다면
int numAry[6] = {0,3,1,2,3,1}
이렇게 0부터 숫자가 몇번 나왔는지를 셈.
그리고 나온 횟수만큼 해당 숫자를 출력함.
카운팅 정렬 장단점
장점: 시간 복잡도가 O(n)이다. (quick sort가 nlogn )
단점: 세는 숫자의 범위만큼 배열이 필요해서, 숫자의 범위가 넓다면 엄청난 메모리가 낭비됨.
내 코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
const int maxNum = 10001;
int numAry[maxNum] = {0};
int numSize;
int num;
scanf("%d", &numSize);
/*숫자가 몇번 나왔는지 세기*/
for (int i = 0; i < numSize; i++) {
scanf("%d", &num);
numAry[num]++;
}
/*나온 횟수만큼 숫자 출력*/
for (int i = 0; i < maxNum; i++) {
for (int j = 0; j < numAry[i]; j++) {
printf("%d\n", i);
}
}
return 0;
}
'Coding Test > 백준' 카테고리의 다른 글
[1181번][실5] 단어 정렬 (0) | 2022.03.07 |
---|---|
[2108번][실3] 통계학 (0) | 2022.03.06 |
[2750번][브1] 수 정렬하기 (0) | 2022.03.05 |
[7568번][실5] 덩치 (0) | 2022.03.05 |
[1018번][실5] 체스판 다시 칠하기 (0) | 2022.03.05 |
Comments