본문 바로가기

백준 write-up/정렬 & 그리디

[백준] 수 정렬하기 4 : 11931번 - Python

728x90
반응형

https://www.acmicpc.net/problem/11931

 

11931번: 수 정렬하기 4

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

www.acmicpc.net

 

 

 

문제를 풀면서 몰랐던 개념

 

[Python] 파이썬 입력 받기 (라이브러리 사용)

-> (sys.stdin.readline)

: 한 두줄 입력받는 문제들과 다르게, 반복문으로 여러줄을 입력 받아야 할 때는 input()으로 입력 받는다면 시간 초과가 발생할 수 있어서 sys.stdin.readline()을 사용해야 한다!

# 한 개의 정수를 입력 받을 때
import sys
a = int(sys.stdin.readline())


# 정해진 개수의 정수를 한 줄에 입력 받을 때
import sys
a,b,c = map(int,sys.stdin.readline().split())


# 임의의 개수의 정수를 한 줄에 입력 받아 리스트에 저장할 때
import sys
arr = list(map(int,sys.stdin.readline().split()))


# 임의의 개수의 정수를 n줄 입력 받아 2차원 리스트에 저장할 때
import sys
data = []
n = int(sys.stdin.readline())
for i in range(n):
    data.append(list(map(int,sys.stdin.readline().split())))
    
    
# 문자열 n줄을 입력 받아 리스트에 저장할 때
import sys
n = int(sys.stdin.readline())
data = [sys.stdin.readline().strip() for i in range(n)]


# 임의의 개수의 정수를 줄 단위로 입력 받아 리스트에 저장할 때 (이번 문제에서 한 것)
n = int(sys.stdin.readline())
arr = []
for i in range(n):
    a = int(sys.stdin.readline())
    arr.append(a)

 

 

문제의 접근 방법

 

문제 자체는 매우 쉬워보이지만, 제한 시간을 생각해서 의미 없이 소요되는 시간을 단축시킬 수 있는 방법을 생각하기.

 

 

내가 막혔던 부분

 

시간 초과!!!

 

 

문제 풀이 방법

 

- 입력 받을 숫자의 개수 n개 입력 받기

- sys 라이브러리를 사용하여 n개의 숫자를 줄 단위로 반복하여 입력 받기

- 리스트 arr 에 입력 받은 숫자들 추가하기

- 리스트 arr 를 내림차순으로 정렬

- 출력 형식에 맞게 줄을 바꿔가며 출력

 

 

 

소스코드

import sys

n = int(sys.stdin.readline())
arr = []

for i in range(n):
    a = int(sys.stdin.readline())
    arr.append(a)
    
arr.sort(reverse=True)

[print(i) for i in arr]
728x90
반응형