[알고리즘] 자릿수의 합

(문제) 자릿수의 합


N개의 자연수가 입력되면 각 자연수의 자릿수의 합을 구하고, 그 합이 최대인 자연수를 출력하는 프로그램을 작성하세요.

각 자연수의 자릿수의 합을 구하는 함수를 def digit_sum(x)를 꼭 작성해서 프로그래밍 하세요.

입력설명

첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다.

각 자연수의 크기는 10,000,000를 넘지 않는다.

출력설명

자릿수의 합이 최대인 자연수를 출력한다.

테스트케이스

입력예제 출력예제
3
125 15232 97
97
7
137 460 603 40 521 128 125
137
15
770 93 883 659 641 446 354 227 338 178 510 357 560 362 884
659

해결방법

def digit_sum(x) 함수를 생성하여 x 값으로 들어오는 숫자를 % 10 으로 숫자를 구해 sum이라는 변수에 구한 숫자를 더한다.

x 값을 몫만 나오도록 10으로 나눠주고, 이 작업을 x가 0이 될 때 까지 반복하여 x의 자릿수들의 합을 구한다.

자릿수들의 합으로 나타나 있는 리스트 하나가 생성되는데, 이 리스트를 이용하여 가장 큰 값을 찾고, 해당 index를 저장하여 입력으로 들어왔던 숫자들의 인덱스를 정답으로 도출한다.


코드 방법 1

def digit_sum(x):
    _sum = 0
    while x:
        _sum += x % 10
        x = x // 10
    return _sum

n = int(input())
arr = list(map(int, input().split()))
sum_arr = list(map(digit_sum, arr))

# 가장 큰 값을 찾기 위한 초기화
_max = -2140000000
answer = None

for i in range(len(sum_arr)):
    if sum_arr[i] > _max:
        _max = sum_arr[i]
        answer = i

print(arr[answer])

코드 방법 2 (파이썬 nic 하게 풀기)

def digit_sum(x):
    return sum(list(map(int,x)))

n = int(input())
arr = input().split()
sum_arr = list(map(digit_sum, arr))

print(arr[sum_arr.index(max(sum_arr))])

댓글남기기