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 |