티스토리 뷰

728x90
반응형

https://www.acmicpc.net/problem/10989

 

10989번: 수 정렬하기 3

첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.

www.acmicpc.net

 

이것도 조건 안 보고 껌일줄 알았는데 메모리 제한이 있어서 ㅠ 메모리 초과 계속 났다.

수 정렬하기2 가 시간 제한 문제라면 이것은 메모리 제한 문제 ,, 

 

우선 메모리 제한 생각 안하고 처음에 제출한 코드!

 

시도 1

import sys

arr = sorted([int(sys.stdin.readline()) for _ in range(int(sys.stdin.readline()))])
print('\n'.join(map(str,arr)))

 

메모리 초과 나와서 stdout도 써봤다가 별 의미없는 삽질을 살짝 거치고 바로 검색행 ㅎ .. ㅋㅋㅋㅋ 

메모리 제한 문제는 풀어본 적이 없어서 대응을 어떻게 해야할지 정말 모르겠었다.

 

그래서 인터넷에서 찾은 코드를 참고해서 다시 풀었다.

 

시도 2 - 정답

import sys
n = int(sys.stdin.readline())
lst = [0]*10001
for i in range(n):
    lst[int(sys.stdin.readline())]+=1
for i in range (len(lst)):
    if lst[i]!=0:
        for j in range(lst[i]):
            print(i)

 

시도 3 - 배열 크기 10000으로 바꾸기 - 성공

import sys
n = int(sys.stdin.readline())
lst = [0]*10000
for i in range(n):
    lst[int(sys.stdin.readline())-1]+=1
for i in range (len(lst)):
    if lst[i]!=0:
        for j in range(lst[i]):
            print(i+1)

 

정렬하지 않고 인덱스를 활용해서 풀 수도 있음을 알게 되었다.

메모리 제한일 때는 그냥 배열을 문제 조건의 최대 크기만큼 선언하고, 인덱스를 활용해서 풀면 좋다는 걸 또 배워간다. 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함