-
[파이썬 / Python] map(int, input().split())에 대해깜빡의 취미/파이썬을 합니다. 2021. 6. 18. 14:41728x90반응형
제목의 식은 백준의 다른 문제를 풀이할 때 계속해서 사용하게 될 것이다. 따라서 좀 더 구체적으로 map(int, input().split()) 을 구성하는 함수들이 무엇이며 어떻게 변형할 수 있는지 알려드리고자 한다. 미리 공부해 두면 변형이 되었을 때에도 적절하게 대처할 수 있을 것이다.
우선 input은 입력된 값을 문자열로 인식해준다. 기본형 input()의 괄호 안에 아무것도 안 적으면, 아래와 같이 공백의 입력란만 나온다.
>>> N = input() hello >>> N 'hello'
만일 괄호 안에 문자열을 넣는다면, 입력을 도와주는 인터페이스 등으로 활용할 수 있다. 다음의 예시를 보자.
>>> N = input("당신의 이름은...?: ") 당신의 이름은...?:
이때 입력값으로 숫자를 인식하기 위해서는 다음과 같이 int 함수를 이용해 주어야 한다. 기본형은 int()로, 괄호 안에 들어간 것을 정수형으로 바꾸어 준다.
>>> N = int(input("입력: ")) 입력: 12 >>> N 12
다음으로 입력값을 두 개 이상으로 구분하려면 split 함수를 이용하면 된다. split 함수는 / 한 문자열을 / 나누어 / 리스트로 구분해 준다. 다음의 예시를 보면, 띄어 쓰기를 기준으로 문장을 나누어 주었다.
>>> a = "This is ccamppak's homepage." >>> a.split() ['This', 'is', "ccamppak's", 'homepage.']
기본형 split()을 이용하면 띄어쓰기 기준으로 구분해 준다. 괄호 안에 특정 문자 등을 넣으면, 해당 문자를 기준으로 문장이 나뉜다.
그럼 input()에 split() 함수를 결합하였을 때 어떤 일이 벌어질까?
>>> N = input().split() 11 12 13 14 >>> N ['11', '12', '13', '14']
원리는 동일하다. 각각의 값을 리스트로 나누어 준다. 이제 입력값 또한 두 개 이상으로 구분하여 결과를 보자.
>>> A, B = input().split() 11 12 >>> A '11' >>> B '12'
놀랍게도 공백을 기준으로 A와 B값을 알아서 구분해 주고 있다.
이 단계까지 명확하게 이해하고 있다면 아래와 같은 식을 만들어낼 수 있다.
A, B = input().split() x = int(A) y = int(B) print(x+y)
네 줄이나 되는 식을 보고 있으면 '왜 저렇게 썼을까?' 하고 느끼는 분들이 있을 것이다. '아까 int(input())을 하면 정수형으로 바꿔준다고 했으니 int(input()).split()라고 쓰면 되지 않을까?'라는 생각을 한 분이라면 아래의 결과를 보자.
>>> A, B = int(input()).split() 11 12 Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: '11 12'
그렇다. 오류다. 혹시 'int(input().split())라고 썼어야 했는데 잘못됐네!'하고 느끼신 분들이라면 아래를 보자.
>>> A, B = int(input().split()) 11 12 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'
이번에도 오류다. int 함수는 리스트는 정수형으로 바꾸어줄 수가 없다.
이럴 때 식을 간략히 하는 데 map 함수를 활용할 수 있다. 기본형은 map(적용할 함수, 반복 가능한 자료형)이다. map 함수를 활용하면, 한 줄의 코딩으로 모든 자료형 각각에 함수를 적용할 수 있다.
다음의 예시를 보자. 리스트임에도, 각각의 문자열에 int 함수를 적용한 것으로 인식되어 오류가 발생하지 않는다. 또 int('231'), int('2324')를 단번에 시행하여 A와 B 모두 정수형이 되었다.
>>> A,B = map(int, ['231', '2324']) >>> A 231 >>> B 2324
위의 예시를 활용하면 최종적으로 map(int, input().split())이라는 식을 얻을 수 있다. 마지막으로 map(int, input().split())를 활용한 예시를 보여드리며 글을 마무리한다.
>>> A,B = map(int, input().split()) 23 34 >>> print(A+B) 57
'깜빡의 취미 > 파이썬을 합니다.' 카테고리의 다른 글
[파이썬/Python] 백준 1001번(A-B) - 단계별로 풀어보기 + [0 < A, B < 10 조건 명시하기] (0) 2021.06.20 [파이썬/Python] 백준 1000번(A+B) - 단계별로 풀어보기 (0) 2021.06.18 [파이썬/Python] 백준 10172번(개) - 단계별로 풀어보기 (0) 2021.06.14 [파이썬/Python] 백준 10171번(고양이) - 단계별로 풀어보기 (0) 2021.06.06 [파이썬/Python] 백준 10718번(We love kriii) - 단계별로 풀어보기 (0) 2021.06.04