백준 10989번
num = int(input())
numList = []
while num > 0:
numList.append(input())
num -= 1
print('\n'.join(sorted(numList)))
앗…메모리 초과라니..
import sys
num = int(sys.stdin.readline())
numList = []
while num > 0:
numList.append(sys.stdin.readline())
num -= 1
sys.stdout.write(''.join(sorted(numList)))
앗 또 메모리 초과당…
다시 살펴보니 2751번인 수 정렬하기 2 문제는 256MB 였는데 이번 문제는 8MB여따…헉
import sys
num = int(sys.stdin.readline())
numList = [0] * 10000000
for i in range(1, num+1):
numList[i] = int(sys.stdin.readline())
sys.stdout.write(''.join(map(str, sorted(numList))))
메모리 제한이 있을 경우 리스트 틀을 미리 만들어 놓고 증감식으로 개수를 세는 것이 유리하다는데… 난 사실 무슨 말인지 한 번에 못 알아들었당
그래서 일단 리스트를 한번에 불리고 그 리스트에 숫자를 집어넣었는데…결과는 같았음
import sys
num = int(sys.stdin.readline())
numList = [0] * 10000
for i in range(num):
numList[int(sys.stdin.readline())] += 1
for i in range(10000):
for j in range(numList[i]):
print(i)
그래서 참고한 사이트의 코드를 잘 뜯어보니..
수는 1~10000 사이가 올 수 있으니까 10000개의 빈(0) 리스트를 먼저 만들어놓는다.
그리고 받아오는 input에 따라 해당 리스트 input번째를 1개씩 늘리는 것이다.
그렇게 하면 input 번쨰의 숫자가 몇번 들어오는지도 중복된 개수를 셀 수 있으면서 10000개가 들은 리스트로 소팅 필요없이 끝낼 수 있는 것이다!
그래서 메모리를 적게 쓰고 문제를 통과할 수 있을듯!
했는데 오잉?! 왜 틀렷지…
import sys
num = int(sys.stdin.readline())
numList = [0] * 10001
for i in range(num):
numList[int(sys.stdin.readline())] += 1
for i in range(len(numList)):
for j in range(numList[i]):
print(i)
잘 생각해보니, 1~10000개까지 숫자가 나올 수 있다했는데, 리스트는 0번째부터 시작이고, 우리는 0번째는 제외하고 첫 번째 리스트부터 사용하니, 10001개가 들어있는 리스트를 사용해야 알맞다!