
sort()와 같은 python의 내장함수/메소드를 잘 활용하면 쉽고 빠르게 문제를 해결할 수 있다.sys모듈을 사용하면 데이터의 입력 시간을 줄일 수 있다.
우선 전체 코드는 다음과 같다.
import sys # 기존의 input보다 짧은 입력시간을 가진다
input = sys.stdin.readline # 매번 sys 치기 귀찮아서 넣었다
case = int(input()) # 입력할 수의 개수
numList = [int(input()) for i in range(case)] # case 만큼 사용자 입력을 반복하여 numList 배열에 입력한다.
numList.sort() # 정렬 내장함수 실행
for i in range(case):
print(numList[i]) # 출력
해당 코드에서 면밀히 살펴볼 부분은 다음과 같다.
sys : python의 모듈sort() : python의 정렬 내장 메소드[ ~ for i in range N] : 배열의 입력 방법각 키워드가 포함된 문단별로 나눠서 분석해보자
sys모듈 은 python의 표준 라이브러리로 인터프리터가 제공하는 변수와 함수를 직접 제어할 수 있게 하는 모듈이다. 상당히 많은 기능을 내포하고 있기 때문에 sys.stdin.readline() 에 관해서만 알아보도록 하자.
num = int(input()) # 숫자를 입력할 수 있다.
위의 경우가 python에서 일반적으로 사용자로부터 숫자를 입력받을 때 사용하는 코드이다. 문자열을 입력받는 input()을 int로 감싸는 형태이다. 해당 라인을 실행하면 터미널에서 입력한 값이 변수 num 에 저장된다.
import sys
num = int(sys.stdin.readline()) # 숫자를 입력할 수 있다. 즉 같은 기능을 수행한다.
sys모듈 을 사용하더라도 수행되는 기능은 같다. input() 대신에 sys.stdin.readline()이 사용된것 뿐이다. 그렇다면 sys 모듈을 사용하는 이유는 무엇일까?

sys모듈을 사용할 경우 그렇지 않았을때 보다 메모리 효율 이나 러닝타임 측면에서 이득을 볼 수 있다. 특히 백준 문제의 경우 제한시간이 굉장히 빡빡한 편이라 sys 모듈을 사용하지 않으면 통과하지 못하는 경우도 있다.
.append() 를 사용하지 않고 배열/리스트 내부에서 명령어/람다함수 등을 이용해 제어할 수 있다.
# case 만큼 사용자 입력을 반복하여 numList 배열에 입력한다.
for i in range(case):
numList.append(int(input())
numList = [int(input()) for i in range(case)]
# 둘 모두 같은 기능을 수행한다.
같은 기능이라도 코드의 길이가 짧으면 일반적으로 좋은 코드로 인식되기 때문에 배열이나 리스트를 제어할 때 가능하면 이렇게 하는것이 좋겠다.
sort() 는 python의 메소드중 하나로 list 의 원소들을 가지고 sort 메소드 내부에서 퀵소트 가 진행된다. 기본적으로 오름차순으로 정렬하며 옵션에 따라 다르게 활용할 수 있다.
numList.sort() # 'numList' 리스트의 원소들을 오름차순 정렬한다.
sort() 는 리스트에만 적용되며 현재의 리스트 자체를 변경시킨다.
import sys
n = int(sys.stdin.readline())
arr = []
for i in range(n):
arr.append(int(sys.stdin.readline()))
for j in sorted(arr):
sys.stdout.write(str(j)+'\n')
위의 코드는 내가 옛날에 제출했었던 코드이다. 현재의 코드와 다른점들을 비교해보자면
.append() 를 사용하였다.sort() 메소드 대신 sorted 내장함수를 사용하였다.sys모듈 의 sys.stdout.write() 를 사용하였다.sorted()의 경우 내장함수로 리스트 자체를 바꾸는 메소드인sort() 와 달리 정렬된 새로운 리스트 를 반환하며 리스트 외에도 딕셔너리 등에서도 사용 가능하다.
append() 에 대한 설명은 위에서 했기 때문에 생략하도록 한다.
참고문서