[python]백준_2751 : 수 정렬하기 2

Choco Ham·2022년 9월 2일

algorithm

목록 보기
1/6

🚗현대인을 위한 3줄요약.

sort() 와 같은 python의 내장함수/메소드를 잘 활용하면 쉽고 빠르게 문제를 해결할 수 있다. sys 모듈을 사용하면 데이터의 입력 시간을 줄일 수 있다.


📌전체코드

문제 링크 : https://www.acmicpc.net/problem/2751

우선 전체 코드는 다음과 같다.

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

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()

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() 에 대한 설명은 위에서 했기 때문에 생략하도록 한다.


참고문서

profile
야호

0개의 댓글