[백준 10989 파이썬] - 수 정렬하기 3

zsunny·2022년 7월 9일
0

📌 문제

💯 정답

• 방법 1. 틀림.. ** 메모리 초과 **

n = int(input())
nums = []
for _ in range(n):
    nums.append(int(input()))   # 메모리 재할당 -> 효율적 사용 X

nums.sort()
for i in nums:
    print(i)

• 방법 2. 정답!!

import sys
input = sys.stdin.readline

n = int(input())
nums = [0] * 10001      # 0 ~ 10000
for _ in range(n):
    nums[int(input())] += 1     # 입력받은 값을 인덱스로 가지는 자리에 +1
                                # 1을 3번 입력받으면 numa[1] = 3 이 됨
for i in range(10001):
    if nums[i] != 0:
        for j in range(nums[i]):	# 저장된 갯수 모두 출력
            print(i)

📝 설명

• 리스트.append()는 메모리를 재할당하는 과정에서 비효율적이게 된다.
• nums의 모든 인덱스에 0 값을 넣어두고
• 입력받은 값을 인덱스로 가지며 +1을 함으로써 해당 값(인덱스)을 몇번 입력받았는지 체크한다.
• 0이 아닌(입력받은 값이 있는) 인덱스(값)을 찾아 들어있는 갯수만큼 반복문을 통해 출력한다.
• 만약 내부 반복문(for j in range(nums[i])가 없으면 1이 3번 입력되었어도 하나만 출력된다.
profile
매일 성장하는 예비 웹 개발자 🌱

0개의 댓글