SW사관학교 정글 개발일지 - 1주차 input()
📍input()
파이썬을 가장 처음 사용하면서 당황스러웠던 것은 그래서 어떻게 데이터를 입력 받는 것인가? 였다.
그럴 때 사용하는 것이 input() 이라는 기능을 사용한다는 것이다.
그리고 input() 을 사용하다가 입력 받는 양이 많아서 백준 코딩 테스트에서 시간초과가 발생하기도 한다.
📍sys.stdin.readline()
이와 같은 문제점을 해결하기 위해 sys.stdin.readline() 을 사용한다.
반복문으로 입력을 여러번 받는 상황에는 무조건 sys.stdin.readline()을
사용하는 것이 시간초과로 인한 문제를 줄여준다고 한다.
import sys # sys import 해주기
a = sys.stdin.readline()
위와 같이 sys를 import 해야 sys를 사용 가능하다고 한다.
자바스크립트를 사용할때는 별도의 import 없이도 브라우저가 웬만한 기능들을 제공 해주었지만
python의 경우에는 import를 시켜주지 않으면 사용할 수 없는 내장 기능들이 꽤나 있는 것 같다.
📍sys.stdin.readline() 사용법
💡1) 한개의 정수를 입력 받을 때
import sys
a = int(sys.stdin.readline())
방금 전에 설명한 글에는 int()가 없었는데 사용법에서 int() 가 들어간 것으로 보여진다.
이유는 sys.stdin.readline()은 한줄 단위로 입력받지만 개행문자(\n)도 같이 입력 받아진다.
예를들면 123을 입력 했다면, 123\n 이 저장되어 개행문자를 제거해야 한다.
또한, 변수 타입이 문자열 형태(str)로 저장되기 때문에, 정수로 사용하려면 int() 사용 해야한다.
💡2) 정해진 개수의 정수를 한줄에 입력 받을 때
import sys
a,b,c = map(int,sys.stdin.readline().split()) # 입력 : 123 456 789
print(a) # 123
print(b) # 456
print(c) # 789
map()을 추가적으로 사용한 것을 볼 수 있다.
map()은 반복 가능한 객체(리스트 등)에 대해 각각의 요소들을 지정된 함수로 처리해주는 함수이다.
위와 같이 사용하면 입력받은 a,b,c를 각각 int형으로 변환을 할 수 있다.
map()은 맵 객체를 만든다
💡3) 임의의 개수의 정수를 한줄에 입력받아 정수로 리스트에 저장할 때
import sys
data = list(map(int,sys.stdin.readline().split())) # 입력 : 123 456 789
print(data) # [123, 456, 789]
split()은 문자열을 나눠주는 함수이다.
괄호 안에 특정 값을 넣어주면 그 값을 기준으로 문자열을 나누고,
아무 값도 넣어주지 않으면 (공백, 탭, 엔터)를 기준으로 나눈다.
list()는 자료형을 리스트형으로 변환해주는 함수이다
map()은 맵 객체를 만들기 때문에, 리스트형으로 바꿔주기 위해서 list()로 감싸줬다.
💡4-1) ❗️임의의 개수의 텍스트를 한줄로 입력받아 저장할때
import sys
# Case 1 - 입력된 문자 + \n으로 출력
a = sys.stdin.readline() # 입력 : The Curious Case of Benjamin Button
print(a) #The Curious Case of Benjamin Button\n
print(len(a)) # 36
# Case 2 - 입력된 문자를 리스트로 출력
a = sys.stdin.readline().split() # 입력 : The Curious Case of Benjamin Button
print(a) # ['The', 'Curious', 'Case', 'of', 'Benjamin', 'Button']
print(len(a)) # 6
자세히보면 Case1과 2의 차이는 split() 사용 유무이다.
텍스트를 한줄로 입력 받을 때 split()을 사용하지 않고 받으면 텍스트가 그대로 들어오게 된다.
하지만 split()사용하고 받으면 리스트(list) 형태로 저장하고 당연히 len()길이도 다르게 인식한다. 위에 임의의 개수의 정수를 한줄에 입력받아 리스트에 저장하는 케이스와 동일하다.
💡4-2) ❗️임의의 개수의 정수를 한줄에 입력받아 저장할때
import sys
# Case 1 - 문자열 리스트로 저장
a = sys.stdin.readline().split() # 입력 : 123 456 789
print(a) # ['123', '345', '789']
# Case 2 - 문자열 리스트로 저장
a = list(map(str,sys.stdin.readline().split())) # 입력 : 123 456 789
print(a) # ['123', '456', '789']
# Case 3- 정수 리스트로 저장
a = list(map(int,sys.stdin.readline().split())) # 입력 : 123 456 789
print(a) # [123, 456, 789]
sys.stdin.readline().split() 으로 사용하면 list(map(str,sys.stdin.readline().split()))를 활용하지 않아도 입력된 숫자를 문자열 리스트로 저장이 가능하다.
Case3과 같이 str 대신 int를 사용하면 3) 임의의 개수의 정수를 한줄에 입력받아 정수로 리스트에 저장할 때와 동일하다
Author And Source
이 문제에 관하여(SW사관학교 정글 개발일지 - 1주차 input()), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jakob1/SW사관학교-정글-개발일지-1주차-input저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)