1. 2750
문제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
출력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
import sys
n = int(sys.stdin.readline())
n_list = [int(sys.stdin.readline()) for i in range(n)]
n_list.sort()
for j in n_list:
print(j)
코드 풀이
첫 줄에 sys.stdin.readline()을 통해 n을 입력받고 int 함수로 정수형 데이터로 변환해 n이라는 변수에 저장한다.
int(sys.stdin.readline())을 for문으로 n번 반복해서 정수형 데이터를 생성하고 [ ] 리스트 형태로 담아서 n_list 라는 새로운 변수에 저장한다.
.sort() 메서드를 사용해 리스트를 오름차순으로 정렬한다.
n_list의 요소를 한 줄에 하나씩 출력하기 위해 새로운 for문을 작성했다. j가 n_list 안의 인자를 하나씩 가져와 print() 함수를 통해 출력된다. 이렇게 작성하면 for문이 반복되면서 n_list의 요소들이 하나씩 출력되기 때문에 따로 줄바꿈 옵션을 지정하지 않아도 한 줄에 하나씩 출력할 수 있다.
import sys
n = int(sys.stdin.readline())
n_list = [int(sys.stdin.readlin() for i in range(n)]
print(n_list.sort_values(ascending=False), end='\n')
오답 코드
위 코드는 처음 이 문제를 풀 때 작성했던 코드로 n_list를 생성하는 단계까지는 동일하다. print문에 작성한 내용을 하나씩 뜯어서 vscode로 실행시키며 오답인 이유를 찾아냈다.
1) sort_values
먼저 list 자료형은 sort_values로 정렬할 수 없다. pandas에서 제공하는 api인 sort_values는 데이터프레임에 사용된다. pandas 공식 문서의 사용 예시는 다음과 같다.
>>> DataFrame.sort_values(by, *, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)
2) ascending=False
그리고 문제를 제대로 읽지 않아서 sort_values(ascending=False)로 내림차순 옵션을 적용해뒀다. 사실 위의 정답 코드에도 reverse=True를 작성해놓고 오답인 이유를 한참 찾았다. 문제를 잘 읽자...
3) end='\n'
다음으로 print()의 end='\n' 옵션은 리스트가 전부 출력된 다음, 모든 요소가 출력된 다음 줄바꿈 옵션이 적용된다. 각 인자 사이의 구분자를 적용하려면 sep='\n'을 작성해야 한다.
4) 리스트 압축 해제
리스트의 각 요소를 분리해 sep 옵션을 적용하려면 Unpacking Operator의 *을 사용해야 한다. Unpacking Operator는 리스트의 압축을 풀고 리스트의 값 또는 요소를 별도의 인수로 전달한다. print(* n_list, sep='\n')으로 작성하면 n_list의 요소들이 별도의 인수로 print 함수에 전달되어 sep='\n' 옵션을 적용할 수 있다.
import sys
n = int(sys.stdin.readline())
n_list = [int(sys.stdin.readline()) for i in range(n)]
n_list.sort()
print(*n_list, sep='\n')
오답 코드 수정
print문에서 바로 n_list.sort()를 작성하면 런타임 에러가 발생한다. 윗 줄에서 .sort() 메서드를 적용한 뒤에 unpacking operator를 사용해서 제출했더니 정답으로 처리되었다.
수업에서 받은 코딩테스트 책의 첫 장에 이 문제가 예시로 나오길래 풀어봤다. 간단한 문제라고 생각했지만 굉장히 오래 걸렸다. 하나하나 뜯어보면 안 써본 함수도 아닌데 엄청 헷갈린다. 틀린 코드를 하나씩 뜯어서 이유를 찾아내는 건 처음 해봤다. 정확한 개념을 찾아 정리하느라 시간이 문제 푸는 시간만큼 걸리는 것만 빼면 좋은 공부 방법인 것 같다. 슈도 코드 작성도 해봐야겠다.
'코딩 테스트' 카테고리의 다른 글
백준 10813 공 바꾸기 파이썬 1차원 배열 풀이 (1) | 2024.04.07 |
---|---|
백준 10810 공 넣기 파이썬 배열 풀이 (0) | 2024.04.04 |
백준 10818, 2562 파이썬 1차원 배열 풀이 (0) | 2024.04.01 |
백준 10807, 10871 파이썬 1차원 배열 풀이 (0) | 2024.03.28 |
백준 25304, 25314 풀이 파이썬 반복문 (0) | 2024.03.25 |