[백준] 2751: 수 정렬하기 2 - 파이썬[python]

다인·2024년 9월 8일

백준

목록 보기
54/112
post-thumbnail

첨에 걍 아무 생각 없이 풀면서 이게 왜 실버지? 했는데 역시 시간초과가 떴다. 전에 sys를 썼던 게 생각나서 이걸로 풀었더니 맞았당

코드

import sys

N = int(input())
num = []
s = sys.stdin.readlines()

for i in s:
    num.append(int(i.strip()))

print(*sorted(num), sep='\n')

처음에는 이렇게 안 하구

for i in s:
    num.append(i.strip()) 

이렇게 했더니 틀렸습니다가 떴다..ㅎㅎ
이유인 즉슨, 문자열을 int로 변환하지 않았기 때문이다.

다른 코드

import sys

N = int(input())
num = []

for _ in range(N):
    num.append(int(sys.stdin.readline()))

print(*sorted(num), sep='\n')
  • 한 번에 받아오지 않고 한 줄씩 받아오는 방법이다.
  • 사실 input으로 받아오는 거랑 차이가 나지 않아보이는데 이렇게 푸는 게 정답인 이유는 뭘까?

input() vs sys.stdin.readline()

  • sys.stdin.readline()와 sys.stdin.readlines()는 기본적으로 input()보다 속도가 더 빠르다고 한다.
  • 대표적으로 input()은 자동적으로 개행문자를 제거해주는 과정에서 성능 차이가 크게 난다고 한다.
  • 간단한 코드면 괜찮지만 큰 입력을 다루거나 속도가 중요한 상황이라면 sys.stdin.readline()(혹은 readlines())를 쓰는 것이 좋겠다.

결론

맨 위가 '다른코드'이다.
자나깨나 문제 꼼꼼히 읽기.. 입력 최대 개수까지..

0개의 댓글