백준 10757번, 파이썬의 큰 정수 입력받기

    문제

    https://www.acmicpc.net/problem/10757

     

    10757번: 큰 수 A+B

    두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

    www.acmicpc.net

    내 풀이

    a,b=map(int,input().split())
    print(a+b)

    C++을 배울적에는 int값에 큰 수를 입력하여 표현할 수 있는 수의 범위를 넘어가는 연산을 하게 되면 오버플로우가 발생하게 되어 long long이라는 데이터 타입에 큰 수를 저장하곤 했다. int는 보통 4바이트 long long은 8바이트를 할당받는 데이터 타입으로 int는 2^32가지, long long은 2^64가지 수를 표현할 수 있게 된다. 

    하지만 파이썬3은 오버플로우가 없다고 한다.

     

    그 이유는 파이썬 2에는 정수형 데이터 타입이 int와 long 두 가지가 있었는데, int는 C와 같은 4바이트 데이터형, long은 arbitary precision을 따르는 데이터 형이다. 여기서 arbitrary-precision은 사용할 수 있는 메모리 양이 정해져 있는 것이 아닌, 현재 남아있는 만큼의 가용 메모리를 모두 수 표현에 끌어다 쓸 수 있는 형태라고 한다. 그래서 파이썬 2에서는 int 타입 변수의 값이 표현 범위를 넘어서게 되면 자동으로 long으로 타입 변경이 되었다.

     

    파이썬 3에서는 long 타입이 없어지고 int 타입만 남게 되었는데, int가 arbitrary precision을 지원하여 오버플로우가 발생하지 않게 되었다고 한다. 

     

    하지만 파이썬3에서도 pydata stack을 사용하는 numpy/pandas 같은 패키지를 사용할 때는 C 스타일이 유지되기 때문에 오버플로우 발생을 고려해야 한다.

     

    다른 사람의 풀이

    print(sum(map(int, input().split())))

    sum 함수를 이용하여 a,b를 따로 설정하지 않고 코드를 만들어 간단하고 알기 쉽게 코드를 만들었다.

    '알고리즘 공부' 카테고리의 다른 글

    백준 10250번, divmod()  (0) 2022.12.03
    백준 1712번  (0) 2022.11.30
    백준 1110번  (0) 2022.11.29
    백준 4344번, range(int(input())) list()[1:]  (0) 2022.11.28
    백준 10951번, try except  (0) 2022.11.27

    댓글