< 백준 - 2750 >

수 정렬하기 

문제 : 
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

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

출력 : 
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.



< 우여곡절 끝에 맞춘 내 코드 > 

sys.stdin.readline( ) 을 사용하고 싶었지만, 실패해 포기하고 그냥 풀었다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
N = int(input())
numbers = []
new_numbers = []
for i in range(N):
    a = list(map(int, input().split()))
    numbers.append(a)
for j in numbers:
    new_numbers.append(j[0])
output = sorted(new_numbers)
for i in output:
    print(i)

6번줄 까지는 입력을 받기 위한 코드다. 숫자들을 입력받아 numbers라는 리스트를 만들고,
8번줄부터 리스트 안에 들어 있는 숫자를 하나씩 빼내와 new_numbers라는 새로운 리스트를 만들어, 이 새 리스트를 sorted( ) 해준다.

그리고 10번, 11번 줄은 출력을 위한 코드다.

맞긴 맞았지만, 이 간단한 문제 푸는데 for문을 세 번이나 썼으니 내가 생각해도 지저분하다.

< sys.stdin.readline( ) 을 사용한 코드 >

sys.stdin.readlin( ) 사용에서 계속 막혀 디스 프로그래머스님의 블로그 글에서 코드를 베껴왔다.


1
2
3
4
5
6
7
8
9
import sys
n = int(sys.stdin.readline())
numbers = []
while(n > 0):
    n -= 1
    numbers.append(int(sys.stdin.readline()))
new_num = sorted(numbers)
for i in new_num:
    print(i)

내가 원래 작성한 코드의 길이는 233B인데 위 코드 길이는 181B이다. 훨씬 효율적인 것을 알 수 있다. 

while 문을 사용한 4, 5번 줄이 흥미롭다. 
sys.stdin.readline( )은 자료구조가 str이기 때문에 6번 줄에서 int 를 사용해 숫자형으로 바꿔줬다. 


덧) 드디어 백준 랭킹 20000등 대에 진입했다. 29936위!