본문 바로가기
Algorithm

[구현/수학] 백준 2751 수 정렬하기 2 - Python

by jangThang 2022. 2. 1.
반응형

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    2751번: 수 정렬하기 2

    첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

    www.acmicpc.net

     

     

     

    2. 문제 풀이

     N개의 수가 주어졌을 때, 오름차순으로 정렬하는 문제입니다.

     

    2022.01.19 - [Algorithm] - [Algorithm] 단골 1번 문제, 구현 / 수학

     

    [Algorithm] 단골 1번 문제, 구현 / 수학

    [ Contents ] 1. 구현  단순히 '구현'만 하면 되는 문제 유형입니다. 문제를 이해하고 입력에 맞춰 적절한 출력만 하면 됩니다. 특별한 알고리즘이나 프로그래밍적 기법 없이, 단순 제어문만 사용하

    star7sss.tistory.com

     입력 범위를 보면, 최대 1,000,000개의 입력이 주어집니다. 입력 갯수가 많으면, 입력 함수의 실행시간도 중요합니다. 보통 알고리즘을 많이 푸시는 분들은 요상한 입출력 함수를 사용하시죠.

     입출력시 사용하는 임시 메모리(버퍼)의 연산까지 고려하기 때문입니다. 입출력 정보를 버퍼에 저장하고 버퍼를 비우는 데에도 꽤 많은 시간이 소요되므로, 해당 시간을 없애고자 특별한 입출력 함수를 사용합니다.

     Ex) C++ - ios_base::sync_with_stdio(false) // java - BufferedWriter, StringBuilder

     

     

     

    3. 코드

    import sys
    input = sys.stdin.readline
    
    N = int(input())
    numlist = []
    for i in range(N):
        numlist.append(int(input()))
    numlist.sort()
    
    for i in numlist:
        print(i)

     파이썬에서는 sys 라이브러리의 sys.stdin.readline()을 입력함수로 사용합니다. sys(tem) 라이브러리는 파이썬 인터페이스를 구성하는 변수를 직접 제어할 수 있으며, 개행문자 제거 및 프롬프트를 제공하지 않으므로 input()보다 빠릅니다.

     

    import sys
    input = sys.stdin.readline

    위 두 줄만 추가하셔서 동일하게 사용하시면 됩니다. 다만, input()과 달리 개행문자(\n)까지 입력받으므로 문자열을 입력받을 때는 .rstrip()를 덧붙여서 제거해야 합니다.

     

     

    cf) 주피터 노트북에서는 sys 라이브러리가 정상적으로 작동하지 않습니다.

    ValueError: invalid literal for int() with base 10: ''

     틀린 코드는 아닙니다. 파이참에서나 백준 온라인 저지에서는 잘 동작하니, 이 점 참고하시기 바랍니다.

     

     

    반응형

    댓글