Adventure Time - Jake ★[백준/python] 10989 수정렬하기3: 카운팅정렬(계수 정렬) / 메모리 줄이기... 왜? pypy3, python3 차이
본문 바로가기
Back-end/백준(python)

★[백준/python] 10989 수정렬하기3: 카운팅정렬(계수 정렬) / 메모리 줄이기... 왜? pypy3, python3 차이

by bogyoi 2023. 10. 27.

 

n=int(input())
arr=[]
for _ in range(n):
  arr.append(int(input()))

arr.sort()
for i in range(n):
  print(arr[i])
 

메모리 초과가 일어난 코드이다..

 

메모리 제한이 너무 작기때문에 sort를 사용할 수 없다.

 

게다가 반복문 안에서 input을 사용해도 메모리 초과로 문제를 통과할 수 없다.

 

import sys

n=int(input())
arr=[0]*10001

for _ in range(n):
  arr[int(sys.stdin.readline())]+=1


for i in range(len(arr)):
  if arr[i] != 0:
    for j in range(arr[i]):
      print(i)
 

이렇게 해도 메모리 초과

 

import sys

n=int(input())
arr=[0]*10001

for _ in range(n):
  arr[int(sys.stdin.readline())]+=1


for i in range(10001):
  if arr[i] != 0:
    for j in range(arr[i]):
      print(i)
 

이렇게 해도 메모리 초과

 

import sys

n=int(sys.stdin.readline())
arr=[0]*10001

for _ in range(n):
  arr[int(sys.stdin.readline())]+=1


for i in range(10001):
  if arr[i] != 0:
    for j in range(arr[i]):
      print(i)
 

이렇게 해도 메모리 초과

 

import sys

n=int(sys.stdin.readline())
arr=[0]*10001

for _ in range(n):
  arr[int(sys.stdin.readline())]+=1


for i in range(10001):
  if arr[i] != 0:
    for j in range(arr[i]):
      print(i)
 

이렇게 해도 메모리 초과

whatttttttttttttttttt??????

다른 사람 ㅋ코드랑 똑같은데 이건 왜 안 되는 거지

 

import sys

N  = int(sys.stdin.readline())
arr = [0]*10000

for _ in range(N):
    num = int(sys.stdin.readline())
    arr[num-1] += 1 # arr[num]에 num이 들어온 개수 count 

for i in range(10000): 
	# arr[i]에 숫자가 들어왔다면 
    if arr[i] != 0:
    	# arr[num]에 num이 들어온 개수 만큼 출력 
        for j in range(arr[i]): 
            print(i+1)
 

why.............................

 

 

 

 

그러다가..

언어를 pypy3말고 python3로 바꾸어 실행해보았는데

맞았다고 떴다..............................

 

내가 알기론 pypy3가 빠르다고 알고있었는데.. 아, 메모리 성능은 반대인건가..... 해서 찾아보니

 

pypy3는 가비지 컬렉터가 python3와 다른 구조기 때문에 python3보다 더 많은 메모리로 사용된다고.