ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [파이썬 / Python] map(int, input().split())에 대해
    깜빡의 취미/파이썬을 합니다. 2021. 6. 18. 14:41
    728x90
    반응형

    제목의 식은 백준의 다른 문제를 풀이할 때 계속해서 사용하게 될 것이다. 따라서 좀 더 구체적으로 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

    댓글

Designed by Tistory.