1️⃣ 문자열 입력 받기
단순하게 input 을 사용하면 문자열을 입력받습니다.
>>> a = input()
>>> type(a)
>>> print(a)
abcd
<class 'str'>
abcd
2️⃣ 숫자 입력 받기
Python 내장함수 int( ) 를 통해 input 값을 형 변환 시켜주어 숫자를 입력받습니다.
>>> a = int(input())
>>> print(type(a))
>>> print(a)
1234
<class 'int'>
1234
3️⃣ split 을 통한 입력 받기
Python에서 제공하는 split 함수를 이용하여 입력받습니다.
문자열.split ( [분류조건], [나눌횟수] ) 를 통해 list 로 return 합니다.
split 파라미터를 기본으로 하면 공백(띄어쓰기 탭 etc)을 기반으로 분리하여 return 합니다.
>>> str = 'Coding is fun'
>>> print(str.split())
['Coding', 'is', 'fun']
이 함수를 이용하여 입력값을 공백을 기준으로 분리해 다음과 같이 입력받을 수 있습니다.
>>> str_list = input().split()
>>> print(type(str_list))
>>> print(str_list)
Coding is fun!
<class 'list'>
['Coding', 'is', 'fun!']
각각을 아래와 같이 두 변수에 나누어 받을 수도 있습니다.
>>> x, y = input().split()
>>> print(x)
>>> print(y)
Coding Everyday!
Coding
Everyday!
4️⃣ map을 통한 입력 받기
split 과 map 함수를 적절히 활용하면 숫자를 다중으로 입력받을 수도 있습니다.
map 함수는 map ( [값의 타입], [적용할 값] ) 으로 활용합니다.
>>> number_list = ['1', '2']
>>> x, y = map(int, number_list)
>>> print(type(x), type(y))
>>> print(x, y)
<class 'int'> <class 'int'>
1, 2
'1' 과 '2' 로 이루어진 list 를 각각의 값에 대해 int 타입을 적용하여 다음과 같이 출력할 수 있습니다.
이를 활용하여 입력 값이 여러 숫자일 경우, 공백을 기준으로 나눠 map 함수를 통해 쪼개 입력받을 수 있습니다.
>>> a, b, c = map(int, input().split())
>>> print(type(a), type(b), type(c))
>>> print(a, b, c)
1 10 100
<class 'int'> <class 'int'> <class 'int'>
1 10 100
이를 응용하여 하나의 리스트로 형변환된 값을 받는 것도 가능합니다.
>>> number_list = list(map(int, input().split()))
>>> print(type(number_list))
>>> print(number_list)
1 10 100
<class 'list'>
[1, 10, 100]
5️⃣ 빠른 입력 받기
코딩 테스트를 풀다 보면, 빠른 입력이 효율성에서 성공과 실패를 결정하는 경우가 있습니다.
그런 경우 sys 모듈을 불러와서 빠른 입력을 받을 수 있습니다.
import sys
>>> data = sys.stdin.readline().rstrip()
>>> print(data)
123 456 789
123 456 789
sys.stdin.readline( )으로 개행문자(\n)가 포함된 한줄을 읽어옵니다.
그리고 rstrip() 메서드로 오른쪽 개행문자를 제거해줍니다. (strip() 메서드를 사용해도 됩니다.)
6️⃣ 2차원 배열 입력 받기
위에서 배운 메서드들을 모두 사용하면 다음과 같이 이차원 배열도 입력받을 수 있습니다.
using append method
>>> word_map = []
>>> for _ in range(8):
>>> word_map.append(list(map(int, input().split())))
>>> print(word_map)
1 0 0 0
0 1 0 0
0 0 1 0
[[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0]]
using list comprehension
>>> word_map = [list(map(int, input().split())) for _ in range(8)]
>>> print(word_map)
1 0 0 0
0 1 0 0
0 0 1 0
[[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0]]
위 코드의 입력 방식으로 보면 split() 메소드로 인해 모두 공백을 두고 입력하는 것을 알 수 있습니다.
그렇다면 공백 없는 입력은 어떻게 리스트로 저장할 수 있을까요?
7️⃣ 공백 없는 경우 입력 받기
split() 함수 대신 5번에서 배운 빠른 입력 받기 방식인 rstrip()과 list() 메소드가 활용됩니다.
>>> word_map = []
>>> for _ in range(8):
>>> word_map.append(list(map(int, list(sys.stdin.readline().rstrip()))))
>>> print(word_map)
1000
0100
0010
[[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0]]
>>> word_map = [list(map(int, list(sys.stdin.readline().rstrip()))))
1000
0100
0010
[[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0]]
sys.stdin.read() 로 개행문자(\n)가 포함된 한줄을 읽어온 후 rstrip() 메서드로 오른쪽 개행 문자를 제거해줍니다.
그리고 개행문자가 제거된 해당 문자열을 list() 함수를 이용해 각 문자들을 요소로 하는 리스트로 만들어줍니다.