▶문제풀이
1차원 배열을 이용한 문제이다.
처음에는 numpy를 사용해 문제를 풀고자 했는데, 다음과 같은 에러가 떴다.
로컬환경에서 채점되는 것이기 때문에 파이썬 외부 라이브러리는 사용할 수 없다고 한다.
그래서 그냥 리스트 배열을 사용해 문제를 풀었다.
num_limit= int(input())
lst= list(map(int,input().split()))
lst=lst[0:num_limit]
print(min(lst), max(lst), sep=' ')
먼저 input으로 입력받을 수들의 개수를 받아온다. 그 후 공백을 기준으로 개수만큼 값을 받아와야한다. 더 많은 수를 입력했을 때를 대비하여, 앞에서부터 해당 개수까지 입력한 값들만을 추출하여 다시 'lst'에 넣어주었다.
그리고 해당 배열에 대한 min과 max값을 공백을 두고 출력하였다.
결과는,
답은 맞았으나, 상위권의 답들과 비교해보았을 때, 시간이 너무 많이 걸리고 코드길이도 너무 길다. 답만 맞았다고 좋아할게 아니라 코드를 더 간단히 만들고 속도를 더 높일 수 있는 방법을 찾아야겠다는 생각이 들었다. 이제까지 시간과 메모리에 구애받지 않고 생각나는 메서드와 함수만으로 코드를 짜왔던 나에게 새로운 자극인 것 같다. 상위권 코드를 보니 대부분이 sys모듈을 사용하였다. sys모듈의 존재는 알고있었지만 코드에 활용해본 경험이 없기 때문에 sys 모듈에 대해 좀 공부해봐야겠다.
▶sys.stdin.read()
sys모듈: 파이썬 인터프리터에 의해 사용되는 변수와 함수를 직접적으로 제어할 수 있도록 만들어준다. 이를 사용하면 명령프롬프트창에서 바로바로 변수나 파일에 값을 넣고 빼고 할 수 있다.
"This module provides access to some variables used or maintained by the interpreter and to functions that interact strongly with the interpreter. It is always available."
- python docs -
sys 모듈 설명 참고 가능한 사이트 (점프 투 파이썬)
sys모듈에서 stdin이라는 함수를 사용해 해당 문제를 풀 수 있다.
sys.stdin은 프로그램 시작 전에 파일객체를 불러오는 역할을 하는 함수로 open함수와 유사한 기능을 지니고 있다. 불러온 파일을 읽을때는 sys.stdin.readlines() 혹은 sys.stdin.read()로 읽어올 수 있다. 이 함수는 파일객체를 file handle 0(file descriptor로 윈도우에선 파일 핸들을 통해 프로세스가 사용중인 FD를 확인할 수 있다)으로부터 불러오는데 file handle0은 디폴트로 콘솔과 연결되있다. 즉 키보드로부터 입력값을 받게된다.
해당 문제에서 input대신 sys를 사용하면 속도를 올리고 숫자를 두 줄로 받아야하는 상황에서 더 간단한 코드를 작성할 수 있다.
import sys
n, *m= map(int,sys.stdin.read().split())
print(n,m)
stdin으로 값을 입력받고 read로 불러온 후에 첫번째 값은 n에 공백을 기준으로 분리하여 배열에 넣은 두번째 줄의 값들은 m에 반복하여 넣었다. 코드 결과는,
(참고로 stdin입력을 끝내고 싶을 때는 ctrl+Z 입력후 enter를 누른다)
n에는 5가, m에는 1,2,3,4,5가 리스트로 들어갔다. 이후 m에 대한 최댓값과 최솟값을 구해주는 코드를 작성하면 정답이다.
'python > 알고리즘 문제풀이' 카테고리의 다른 글
[프로그래머스 | python3] K번째 수_ sort() 사용 (2) | 2021.05.12 |
---|---|
[프로그래머스 | python3] 완주하지 못한 선수 (1) | 2021.05.11 |
[프로그래머스 | python3] 폰켓몬 (1) | 2021.05.10 |
[백준2577] 숫자의개수/ 문자열 하나하나 받아오기/ python (0) | 2021.02.24 |
[백준2562]최댓값/ read와 readlines의 차이/ python (0) | 2021.02.20 |