당연하게도 sort를 사용하면 메모리를 많이 먹는다는걸 모르고 문제 풀이를 시작했기 때문에 list에 입력받아 sort를 해 출력하는 코드를 먼저 짰다. ( 짜면서 이건 너무 쉬운데?? 라는 생각은 당연히 들었고... 답도 당연히 아닐것 같긴 했다.. ) 채점 결과 역시 틀리게 되었고 구글링 결과 생각한대로 sort가 메모리를 많이 잡아먹는것이 문제였다.
-- 내가 짠 코드
# sort 사용시 메모리가 초과된다
import sys
n = int(sys.stdin.readline())
a = [0] * 10000 # 10000보다 작은 수
for i in range(n):
a[int(sys.stdin.readline())-1] +=1
for i in range(len(a)):
if a[i] > 0:
for _ in range(a[i]):
print(i+1)
입력되는 N은 10000보다 작거나 같은 수이기 때문에 다음과 같이 10000까지를 0리스트로 만들어서 해당하는 숫자를 입력받으면 해당하는 수의 인덱스를 하나씩 증가시키고, 증가되있는 숫자만큼 빼주도록 만들게 되었다.
( 10000개의 리스트를 만든다는 건 부끄럽지만 구글링을 하다가 봐버려서 그대로 사용하게 되었다... sort가 진짜 문제인지 확신했어야 됐기 때문에..! )
정답은 맞았는데 10000까지 필요없는 리스트를 만들고 필요없이 0을 돌아가며 검사를 하는 이 방식이 과연 효율적인지는 잘 모르겠다. Java의 리스트를 만들때 입력을 받지 않고 미리 0리스트를 만드는 그런 느낌을 받았다.
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준 1966번] 프린터 큐 - 큰 수부터 출력하여라 (0) | 2022.01.05 |
---|---|
[백준 2775번] 부녀회장이 될테야 (0) | 2022.01.02 |
[백준 1929번] 소수 구하기 - 에라토스테네스의 체 (0) | 2022.01.02 |
댓글