준호씨의 블로그

hackerrank - A Very Big Sum - Python3 본문

개발이야기/PS - Problem Solving, 알고리즘

hackerrank - A Very Big Sum - Python3

준호씨 2020. 5. 1. 23:55

문제: https://www.hackerrank.com/challenges/a-very-big-sum/problem

배열의 합의 구하시오. 몇몇 숫자는 꽤 클 수 있음을 명심하십시오.

Input

n: 숫자의 갯수
숫자들

쉬운 듯 어려운듯한 문제입니다. 제약사항을 잘 확인해 봅니다.

Constraints

1 <= n <= 10
0 <= ar[i] <= 10^10

10의 10승이면 100억입니다. integer의 범위는 언어에 따라 다르지만 보통 -2,147,483,648 ~ 2,147,483,647입니다. 표현할 수 있는 숫자가 -21억에서 21억 정도라는 이야기입니다. 제약 범위를 벗어납니다. 하지만 long 자료형을 사용하면 문제가 없을 거 같습니다. long의 범위는 -9223372036854775808 to 9223372036854775807입니다. 대략 922경까지의 숫자를 표현할 수 있기 때문에 웬만해서는 문제가 없어 보입니다.

python은 기본적으로 long을 사용하기 때문에 크게 신경 쓸 필요는 없습니다. PEP 237 -- Unifying Long Integers and Integers를 참고하시기 바랍니다. 그런데 이건 이미 2001년이고 python 2.2 버전 때의 이야기네요.

https://docs.python.org/3/library/stdtypes.html문서를 보면 "Integers have unlimited precision."이라는 문구가 보입니다. python에서 정수형은 자릿수의 제한이 없는 거 같습니다. 실제로 long타입 최댓값을 3번 더해도 잘 계산이 됩니다.

>>> 9223372036854775807 + 9223372036854775807 + 9223372036854775807
27670116110564327421

언제부터 이 방식이 지원되었는지, 연산 속도에서 비효율적인 건 아닌지는 좀 더 찾아봐야겠지만, 적어도 사용하는 입장에서는 간편하긴 합니다.

아무튼

#!/bin/python3

import math
import os
import random
import re
import sys

# Complete the aVeryBigSum function below.
def aVeryBigSum(ar):

if __name__ == '__main__':
    fptr = open(os.environ['OUTPUT_PATH'], 'w')

    ar_count = int(input())

    ar = list(map(int, input().rstrip().split()))

    result = aVeryBigSum(ar)

    fptr.write(str(result) + '\n')

    fptr.close()

 에서 aVeryBigSum 함수를 완성해 주면 됩니다. 이렇게 말이죠.

def aVeryBigSum(ar):
    return sum(ar)

참 쉽죠?

0 Comments
댓글쓰기 폼