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
- 리덕스장바구니
- 스프링
- 자료구조
- react-redux
- CPU 스케줄링
- error
- C++
- 백준
- 분할메모리할당
- Operating System
- OS
- 공부
- 프로그래머스
- Spring
- react
- 정렬
- 코드업
- web
- codeup
- 알고리즘
- 파이썬
- 협업
- Java
- 토이프로젝트
- 타입스크립트
- 일상
- Redux
- js to ts
- memory
- 기초100제
Archives
- Today
- Total
감자튀김 공장🍟
[백준/10989] 수 정렬하기 3 (with 파이썬) 본문
반응형
✔ 문제
✔ 풀이
🍣 틀린 코드 (메모리 초과)
import sys
input = sys.stdin.readline
n = int(input())
nums = []
for _ in range(n):
nums.append(int(input()))
max_num = max(nums)
count = [0] * (max_num + 1)
sorted_nums = []
for i in nums:
count[i] += 1
for i in range(max_num + 1):
for _ in range(count[i]):
sorted_nums.append(i)
for i in sorted_nums:
print(i)
계수 정렬을 사용하라길래 사용해봤더니 메모리 초과가 떴다 (〃⌒▽⌒〃)ゝ
🍔 정답 코드
import sys
input = sys.stdin.readline
n = int(input())
nums = [0] * 10001
for _ in range(n):
x = int(input())
nums[x] += 1
for i in range(10001):
if nums[i] != 0:
for j in range(nums[i]):
print(i)
✔ 설명
🥐 틀린 코드와 정답 코드의 차이점
1. nums에 입력 받은 숫자만 append하는 것이 아니라 입력으로 들어올 수 있는 수의 범위 만큼 배열 길이를 미리 지정해놓는다.
2. 최댓값, 계수를 카운트 하는 배열, 카운트한 계수의 수를 저장하는 배열 등 여러 변수를 계속 초기화하지 않는다. (메모리 부족함)
3. 입력받을 수 있는 수 만큼 할당된 nums에 바로바로 새로운 수를 입력받으면서 입력받은 인덱스의 값을 +1 해준다.
ㄴ ex) 4 입력 시 nums[4] += 1
4. nums의 길이만큼 for문을 돌아 만약 nums[i]가 0이 아니라면 nums[i]의 값만큼 해당 값을 출력하면 된다.
✔ 후기
계수 정렬 진짜 이번에 백준 알고리즘으로 처음 접해본 것 같다.
어떤 정렬인지 몰라서 알고리즘부터 공부하고 해당 알고리즘으로 바로 풀어봤는데 역시나 메모리 초과가 떴다.
아무래도 여러 변수를 초기화하여 할당받은 부분과 처음 nums를 입력받을 수 있는 범위만큼의 길이로 할당해놓지 않은 것이 패착이었던 것이라 생각된다.
반응형
'Algorithm > BOJ' 카테고리의 다른 글
[백준/1427] 소트인사이드 (with 파이썬) (0) | 2022.11.13 |
---|---|
[백준/2108] 통계학 (with 파이썬) (0) | 2022.11.12 |
[백준/2751] 수 정렬하기 2 (with 파이썬) (0) | 2022.11.10 |
[백준/25305] 커트라인 (with 파이썬) (0) | 2022.11.09 |
[백준/2587] 대표값2 (with 파이썬) (0) | 2022.11.08 |
Comments