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 | 31 |
Tags
- kotlin retrofit
- 백준 균형잡힌 세상
- 백준 랜선 자르기
- 좌표 정렬하기
- 백준
- 백준 통계
- 백준 11866
- 인트로 애니메이션
- ViewBinding Fragment
- 백준 4949
- 안드로이드 공공데이터
- 공공데이터 kotlin
- 공공데이터 retrofit
- 백준 1837
- 수 정렬하기3
- 코틀린 미세먼지
- 안드로이드 인트로 화면
- 모각코
- 안드로이드 인트로 코틀린
- 백준 요세푸스 문제0
- 백준 11651
- 코틀린 공공데이터
- 좌표 정렬하기2
- 백준 11650
- 나이순 정렬
- Fragment 이동
- 안드로이드 미세먼지
- kotlin fragment
- 백준 1920
- 백준 암호제작
Archives
- Today
- Total
개발 지식 공유, 복습
백준-10989(수 정렬하기 3) C++ 본문
https://www.acmicpc.net/problem/10989
처음 문제를 접했을 때 수 정렬하기 2와 차이가 없다고 생각하고 #include <algorithm> 사용해 단순히 정렬한 결과...
다시 문제를 보니, 메모리 용량 제한이 있었던 것이었다... 문제를 제대로 읽는 것이 중요...
여기서의 문제는 문제에서 제시될 자연수의 수(N)만큼 배열의 크기로 선언해 버린다면 엄청 많은 메모리를 차지할 것이다.
그래서 생각난 방법은 최대 입력될 수 있는 자연수의 크기는 10000이었다.
그러면 처음부터 배열의 크기를 10001로(1을 더한 이유는 입력될 수에 맞게 인덱스를 설정하기 위함), 모두 0으로 설정하고 입력될 자연수를 인덱스화해 한 개씩 ++를 해보는 것이다.
입력을 다 받은 후에는 이중 포문으로 각 인덱스의 수만큼 반복해 해당 인덱스를 출력하는 것이다.
그 결과...
코드는 아래와 같다.
#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{
freopen("input.txt", "rt", stdin);
int n;
scanf("%d", &n);
// n의 크기로 배열을 주면 10000000크기의 배열까지 만들어져버릴 수 있다.
// 최대 자연수는 10000이므로, 10001크기의 배열을 만들어 들어오는 수의 인덱스를 +1씩 해줌
int arr[10001] = {0};
int data;
for (int i = 0; i < n; i++)
{
scanf("%d", &data);
arr[data]++;
}
for (int i = 0; i < 10001; i++)
{
for (int j = 0; j < arr[i]; j++)
{
printf("%d\n", i);
}
}
return 0;
}
이 때 첫 반복문은 10001, 두 번째 반복문은 해당 인덱스만큼 해야 0인 인덱스는 반복문을 실행하지 않고 잘 출력한다.
'알고리즘(백준)' 카테고리의 다른 글
백준 - 2108(통계학) C++ (0) | 2021.12.21 |
---|---|
백준- 1920(수 찾기) C++ (0) | 2021.09.01 |
백준 - 11651(좌표 정렬하기 2) C++ (0) | 2021.08.31 |
백준- 11650(좌표 정렬하기) C++ (0) | 2021.08.31 |
백준-10814(나이순 정렬) C++ (0) | 2021.08.28 |