파이썬 알고리즘-6 자릿수의 합

jiffydev·2020년 8월 20일
0

Algorithm

목록 보기
6/92
post-thumbnail

6.자릿수의 합

N개의 자연수가 입력되면 각 자연수의 자릿수의 합을 구하고, 그 합이 최대인 자연수를 출력
하는 프로그램을 작성하세요. 각 자연수의 자릿수의 합을 구하는 함수를 def digit_sum(x)를
꼭 작성해서 프로그래밍 하세요.

▣ 입력설명
첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다.
각 자연수의 크기는 10,000,000를 넘지 않는다.

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

▣ 입력예제 1
3 1
25 15232 97

▣ 출력예제 1
97

내 코드

n=int(input())
lst=list(map(int, input().split()))
sum_list=[]

def digit_sum(x):
    sum=0
    for i in range(len(str(x))):
        sum+=int(str(x)[i])
    return sum

for x in lst:
    sum_list.append(digit_sum(x))
idx=sum_list.index(max(sum_list))
print(lst[idx])

함수 안의 반복문에서 범위를 저렇게 잡지 않고 str(x)로만 해도 문제가 없었다. 차이는 없지만 조금이라도 알아보기 쉬운 코드가 바람직할듯.
함수 실행 부분의 반복문에서는 리스트를 만들어 그 안에 하나씩 합을 append해서 그 안에서 최댓값을 가진 원소의 인덱스를 가져와, 원 리스트의 같은 인덱스를 출력하도록 했는데 효율성에서 차이가 있을지 모르겠다.

풀이

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

n=int(input())
a=list(map(int, input().split()))
res=0
max=-2147000000
for x in a:
    tot=digit_sum(x)
    if tot>max:
        max=tot
        res=x
print(res)

반성점

  • str의 개념을 다시 한번 생각하기
  • 최대/최소값을 구할 때 자꾸 리스트를 사용해서 일단 넣어놓고 그 사이에서 값을 구하는 습관이 있는데 풀이처럼 max/min을 놓고 교체해가는(?) 방법에 익숙해지기

배운 것

  • 각 자리수의 합을 구할 때는 str으로 만들어서 구할 수도 있지만 풀이처럼 while문에서 10으로 나눈 나머지를 더하고 몫은 나머지를 버린 값으로 만들기를 반복해서 구할 수도 있다.
profile
잘 & 열심히 살고싶다

0개의 댓글