[알고리즘] 자릿수의 합
(문제) 자릿수의 합
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))])
댓글남기기