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) 임의의 개수의 정수를 한줄에 입력받아 정수로 리스트에 저장할 때와 동일하다

좋은 웹페이지 즐겨찾기