조금씩 꾸준히 완성을 향해

[Algorithm] 기초 문제 / 자릿수의 합 본문

DataStructure & Algorithm/문제풀이

[Algorithm] 기초 문제 / 자릿수의 합

all_sound 2022. 8. 29. 23:28

▶ 문제

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

 

▶ 입력 설명

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

 

▶ 출력 설명

자릿수의 합이 최대인 자연수를 출력한다. 자릿수의 합이 같을 경우 입력순으로 먼저인 숫자 를 출력합니다.

 

▶ 입력

3

125 15232 97

 

▶ 출력

97

 


 

▷ 내가 짜본 코드

import sys
sys.stdin=open("input.txt", "r")
n = int(input())
a = list(map(int, input().split()))

def digit_sum(x) :
    b = 0
    x = str(x)
    for i in x:
        b += int(i)
    return b
    
max = 0
for i in a :
    plus = digit_sum(i)
    if plus > max:
        max = plus
        num = i
print(num)

자리수 합하는 함수 만들기가 정말 힘들었다.

머리 속에 로직은 그려졌는데 그게 코드로 구현이 안돼서 이틀간을 고민했다.

그래도 감격스럽게도 완성을 했다는 사실!!! ㅠㅠ  

 

자리수를 합하기 위해서는 숫자가 문자열로 취급이 되야 한다는 게 가장 먼저 든 생각이었다. 

그래서 숫자를 문자열로 바꾸어 반복문을 돌린 후, 그걸 다시 숫자로 바꾸어 더하였다. 

최대값 구하는 부분은 몇 번 반복한 패턴이라 수월하게 할 수 있었다.

 

 

▷ 예시 코드

import sys
sys.stdin=open("input.txt", "r")
n=int(input())
a=list(map(int, input().split()))

def digit_sum(x):
    sum=0
    while x>0:
        sum+=x%10
        x=x//10
    return sum
    
res=0
max=-2147000000
for x in a:
    tot=digit_sum(x)
    if tot>max:
        max=tot
        res=x
print(res)

예시 코드에서는 데이터 타입을 바꾸는 번거로움을 확실히 줄여주는 방법을 사용하였다.

나머지와 몫을 이용해 자리수를 각각 떼서 더해주면 간단히 구현이 된다.

 

솔직히 이런 수학적인 계산법은 따로 배우지 않는 한 스스로 생각해 내기가 정말 어려운 것 같다. 

while 문에 각각 숫자를 넣으며 따라가니 이해가 되긴 했다. 이 부분은 익숙해 지는 수밖에 없을 듯!

 

또 for문을 많이 쓰다보니 while문에 대한 이해와 감각이 상대적으로 부족한 것 같다. 

더 많은 예제를 접해봐야 겠다!