Lumpy Space Princess - Adventure Time
코딩테스트/파이썬 알고리즘 문제풀이 입문

[파이썬 알고리즘 문제풀이 입문] 코드 구현력 기르기 - 자릿수의 합

yaebb_82 2023. 4. 11.

*문제 본문은 강의 내용과 관련되어 있어 자세하게 적지 않았습니다.

 

 

문제

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

 

 

 

풀이

• 내 풀이

import sys
input = sys.stdin.readline

N = int(input())
nums = list(input().split())
result = list()

def digit_sum(x):
    count = 0
    for j in nums[x]:
        count += int(j)
    result.append(count)

for i in range(N):
    digit_sum(i)

print(nums[result.index(max(result))])

 

• 답안 (정수로 접근)

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
    
max = -1e9

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

print(res)

• 답안 (문자열로 접근)

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

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

max = -1e9

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

print(res)

- 정수로 접근하는 방법과 문자열로 접근하는 방법 2가지가 있는데, 나는 문자열로 접근하는 것을 선택했다.

- 답안은 입력받을 때 int()로 변환해서 리스트에 저장하고, 이를 다시 str()로 변환하고 다시 int()로 변환한다.

   → 답안의 int() → str() → int() 과정을 하나라도 줄이고자,

       나는 애초에 문자열로 입력받아서 digit_sum() 함수에서 for문을 돌릴 때, int()로 변환해서 접근했다.

- 나는 리스트의 메서드인 max()를 활용해서 해당 index를 알아내 답을 구했다면, 답안은 변수에 저장하고 해당 값이 최대값 변수인 max의 값과 비교해서 답을 구한다.

- 굳이 리스트를 2개를 사용하지 않고도 해결할 수 있다는 것을 답안을 통해 알게 되었다.

 

 

 

반응형

댓글