본문 바로가기

코딩테스트 준비 with Python/내가 보려고 정리하는 문풀

자릿수의 합

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

각 자연수의 자릿수의 합을 구하는 함수를 digit_sum(x)로 정의하여 프로그래밍!

 

입력예시)

3

125 15232 97

 

*첫번째 줄은 N, 그 밑은 N개의 자연수들

 

출력예시)

97


내가 쓴 코드

def digit_sum(x):
    sum = 0
    maxNum = len(x) - 1
    x = int(x)
    for i in range(maxNum, -1, -1):
        sum += x//10**i
        x -= (x//10**i)*(10**i)

    return sum

N = int(input())

numLst = input().split()

sumLst = []

for x in numLst:
    sumLst.append(digit_sum(x))

print(numLst[sumLst.index(max(sumLst))])

모범답안 1

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()))

max = -214700000
for x in a:
    tot = digit_sum(x)
    if tot > max:
        max = tot
        res = x
print(res)

모범답안 2

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

n = int(input())
a = list(map(int, input().split()))

max = -2147600000
for x in a:
    tot = digit_sum(x)
    if tot > max:
        max = tot
        res = x
print(res)

모범답안 보고 반성하기

 

1. 일단 정수형으로 접근하는 방법에서, 자릿수의 합을 구하는 방법이 
내가 생각한 방법보다 모범답안에서의 방법이 훨씬 깔끔하다.
나는 특정 숫자의 최대자릿값을 먼저 계산하고, 그에 따라서 가장 큰 10의 제곱수로 나누고, 
그걸 또 곱해서빼고… 아주 힘들게 구했는데
나머지 연산자를 사용해서 일의자리 수 부터 구해내고 몫연산자로 자연스럽게 자릿수 이동까지..
ㅠㅠ 많이 풀어보자 우니

2. 정수형으로 접근하지 않고, 애초에 문자열형태에서 한 문자씩 빼오는 생각은 나도 했다.
근데 구현해보려다가 그냥 숫자형으로 이용했는데, 그 원인은 저렇게 함수로 따로 더하는 부분을 만들어서
사용하는게 익숙치 않았다. 풀다보면 늘겠징. 아자아자


다시 풀어보기!!

def digit_sum(x):
    sum = 0
    for y in str(x):
        sum += int(y)
    return sum

N = int(input())
lst = list(map(int, input().split()))

max = -2147600000
for x in lst:
    sumRes = digit_sum(x)
    if sumRes > max:
        max = sumRes
        answer = x

print(answer)

'코딩테스트 준비 with Python > 내가 보려고 정리하는 문풀' 카테고리의 다른 글

뒤집은 소수  (2) 2024.06.10
소수 (에라토스테네스의 체)  (2) 2024.06.08
정다면체  (0) 2024.06.07
대표값  (0) 2024.06.06
K번째 큰 수  (0) 2024.06.06