https://www.acmicpc.net/problem/10989
틀린코드❌
import sys
input = sys.stdin.readline
nums = []
n = int(input())
for i in range(n):
num = int(input())
nums.append(num)
for i in sorted(nums):
print(i)
문제만 보면 어려운 문제가 아니다. 하지만, 시간초과, 메모리초과 때문에 고려해야할 것이 있는 것 같다.
import sys
input = sys.stdin.readline
nums = [0]*10000
n = int(input())
for i in range(n):
nums[int(input())-1] += 1
for i in range(10000):
if nums[i] != 0:
for j in range(nums[i]):
print(i+1)
우선, 여러개를 입력 받을 때, input() 함수보다 sys.stdin.readline() 으로 사용했을 때 빠르다.
그리고 for문에서 append를 사용하면 메모리 재할당이 이루어지기 때문에 메모리를 효율적으로 사용하지 못한다고 한다.
문제를 보면 10000개까지 입력 가능하다고 하니 0으로 초기화 된 배열 10000개를 생성한 후 입력값-1 인덱스 값을 +1 해준다. 그리고 10000번 for문을 돌려 배열값이 0이 아닌 경우 출력해주면 따로 정렬을 하지 않아도 된다.
이때, for문을 사용하는 이유는 같은 수가 여러번 들어갔을 경우를 고려한 것이다.
✨ sys.stdin.readline 사용법
📢 sys.stdin.readline()은 한줄 단위로 입력받기 때문에, 개행문자가 같이 입력된다.
'Algorithm > Problems' 카테고리의 다른 글
[백준/파이썬] 1427번 소트인사이드 (0) | 2022.11.08 |
---|---|
[백준/파이썬] 2108번 통계학 (0) | 2022.11.08 |
[백준/파이썬] 2563번 색종이 (0) | 2022.11.07 |
[백준/파이썬] 2566번 최댓값 (0) | 2022.11.07 |
[백준/파이썬] 2738번 행렬 덧셈 (0) | 2022.11.07 |