사실 나는 공간 복잡도나 시간 복잡도에 대한 기초가 없다.
그래서 다음과 같은과 같은 코드를 짜면 공간 초과 및 시간 초과의 오류가 난다.
N = int(input())
set1 = []
for _ in range(N):
set1.append(int(input()))
set1 = sorted(set1)
for element in set1:
print(element)
그럼 공간 초과가 왜 나올까 ?
결론적으로 append를 이용하여 공간 초과가 나왔다
for 문 속에서 append를 사용하게 된다면 메모리 재할당이 이뤄지므로 메모리를 효율적으로 사용하지 못한다고 한다.
관련 글은 다음 글을 참고해보자
10_메모리 관련
##메모리 주소 알아내기 ``` >>> id(2) 4484212032 ``` 16진법으로 나타내면 다음과 같다. ``` >>> hex(id(2)) ‘0x10b47a…
wikidocs.net
그래서 append를 사용하지 않고 다음과 같이 코드를 수정해보았다.
N = int(input())
my_list = [int(input()) for _ in range(N)]
my_list = sorted(my_list)
for element in my_list:
print(element)
그래도 메모리 초과가 나온다....
문제는 sorted 함수를 쓰면 메모리가 또 효율적으로 작동하지 않는다고 한다.
이때 사용할 수 있는 방법 중 하나는 계수 정렬이다.
문제를 보면 약 10,000,000개의 입력이 들어오지만,
입력을 받는 수의 크기가 10,000 이하라고 한다.
즉, 무조건 중복이 존재할 수 있다는 말이다.
리스트의 인덱스 번호로 세어보자
list의 2번 인덱스는 이제부터 >> 2가 나온 갯수이다.
예를 들어 ,
list의 10 인덱스( arr[10] = 2 ) 에 2가 되어있으면
10을 두번 출력해주면 된다.
import sys
input = sys.stdin.readline
num = int(input())
arr = [0]*10001
for i in range(num):
a = int(input())
arr[a] = arr[a] + 1
for i in range(len(arr)):
if arr[i] != 0:
for j in range(arr[i]):
print(i)
'백준 문제(초급)' 카테고리의 다른 글
[boj] 2294 동전2 (0) | 2025.03.23 |
---|---|
백준 2164 카드 2 (0) | 2023.05.28 |
백준 9012 괄호 (0) | 2023.05.28 |
백준 10815 숫자 카드 (0) | 2023.05.28 |
댓글