728x90
728x90
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
5 초 | 8 MB | 197399 | 45716 | 34498 | 23.464% |
문제
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
알고리즘 분류
- 정렬
시간 제한
- Java 8: 3 초
- Java 8 (OpenJDK): 3 초
- Java 11: 3 초
- Kotlin (JVM): 3 초
- Java 15: 3 초
메모리 제한
- Java 8: 512 MB
- Java 8 (OpenJDK): 512 MB
- Java 11: 512 MB
- Kotlin (JVM): 512 MB
- Java 15: 512 MB
문제 출처
https://www.acmicpc.net/problem/10989
10989번: 수 정렬하기 3
첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.
www.acmicpc.net
문제 해결 방법
- 맨 처음엔 벡터(vector)와 sort() 함수를 이용하여 문제를 해결하려고 하였으나 메모리 초과 오류가 떴다.
- 그래서 다른 방법을 찾아보다가 10,000 보다 작거나 같은 자연수들을 정렬하는 문제임을 확인하고 배열을 이용하여 1부터 10,000까지의 숫자가 각각 몇 번 나오는지를 체크하여 출력시키는 방법을 이용하기로 하였다.
for (int i = 0; i < N; i++) { cin >> num; cnt[num]++; } for (int i = 0; i < 10001; i++) { for (int j = 0; j < cnt[i]; j++) { cout << i << '\n'; } }
- cnt[i]의 값이 0이 아닐 경우, i를 cnt[i]의 크기 만큼 출력한다.
- 예) 2를 2번 입력 받을 경우, cnt[2]의 값은 2가 된다. 2중 for 문을 돌 때, cnt[2]가 2일 경우, i는 2이므로 2가 2번 출력된다.
- 이번 문제를 풀면서 입력 받는 수의 경우의 수가 적을 경우, 배열을 활용하여 문제를 쉽게 해결할 수 있다는 점을 배울 수 있었다.
- 입력 받은 수를 다 입력 받아서 배열에 저장하여 문제를 풀 경우, 제한된 8MB의 메모리를 초과한다.
- 1 ≤ N ≤ 10,000,000, int 형 : 4 Bytes
- Bytes = 40MB
코드
#include <iostream> using namespace std; int N, num, cnt[10001]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> N; for (int i = 0; i < N; i++) { cin >> num; cnt[num]++; } for (int i = 0; i < 10001; i++) { for (int j = 0; j < cnt[i]; j++) { cout << i << '\n'; } } return 0; }
채점 결과

참고
- [단계별로 풀어보기] > [정렬]
- 브론즈I
728x90
728x90
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ-11651][C++] 좌표 정렬하기 2 (0) | 2022.10.30 |
---|---|
[BOJ-11650][C++] 좌표 정렬하기 (0) | 2022.10.29 |
[BOJ-1427][C++] 소트인사이드 (0) | 2022.10.27 |
[BOJ-2108][C++] 통계학 (0) | 2022.10.27 |
[BOJ-2559][C++] 수열 (0) | 2022.10.26 |
[BOJ-11659] 구간 합 구하기 4 (0) | 2022.10.26 |
[BOJ-9020][C++] 골드바흐의 추측 (0) | 2022.10.25 |
[BOJ-4948][C++] 베르트랑 공준 (0) | 2022.10.25 |