Juni_Dev_log

(인프런) 파이썬 알고리즘 문제1-6 "자릿수의 합" 본문

CodingTest/인프런 (Algorithm)

(인프런) 파이썬 알고리즘 문제1-6 "자릿수의 합"

Juni_K 2021. 2. 17. 14:35

자릿수의 합

 

Problem

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

 

▣ 입력설명

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

 

▣ 출력설명

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

 

▣ 입력예제

 

3

125 15232 97

 

▣ 출력예제

 

97

 

💯 Solution ①

: Only My Thinking

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import sys
sys.stdin=open("input.txt","rt")
 
# n은 다음 줄의 자연수의 갯수
n=input()
# n개의 자연수들을 리스트에 담기 : n_list
n_list=list(map(int, input().split()))
# 자연수들의 자릿수 합을 저장할 리스트
result=[]
 
def digit_sum(x):
    # n_list를 하나씩 꺼내서 자릿수마다 더한 다음 result 리스트에 넣기
    for i in range(len(x)):
        result.append(sum(map(intstr(x[i]))))
 
    # result에서 가장 큰 값
    max_result=max(result)
 
    # result를 for문으로 돌려서 가장 큰 값일 때 index를 찾기
    for j in range(len(result)):
        # 가장 큰 값과 같을 때 출력
        if result[j]==max_result:
            print(x[j])
            # 겹치는 것도 제일 앞쪽에 있는 값을 먼저 출력하기 때문에 굳이 출력을 더 할 필요없음 break 사용
        break
 
digit_sum(n_list)
cs

 

- 두 번째 줄로 주어진 값들을 자릿수마다 더해서 result배열에 담는다.

- result 배열에서 제일 큰 값을 찾고, 해당 값과 result에서 같을 때 인덱스를 찾아서 해당 값을 print()한다.

 

 

💯 Solution ②

: Tutor advice

 

① 정수형 처리방법 : 몫과 나머지를 활용해서

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
### 정수형 처리 방법(몫과 나머지 활용) ###
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:
        # x를 10으로 나눈 나머지를 sum에 추가
        sum+=x%10
        # x를 계속해서 10으로 나눈 몫
        x=x//10
    return sum
 
# 임의의 가장 작은 값을 배정
max=-2147000000
for x in a:
    # x라는 리스트의 각 자릿수의 합을 구하는 함수 사용
    tot=digit_sum(x)
    if tot>max:
        max=tot
        # 가장 큰 값이 res에 배정
        res=x
print(res)
cs

- 몫과 나머지를 활용해서 코드를 작성했다.

- def digit_sum(x) 라는 함수에서 받은 파라미터 값이 10으로 나눈 나머지 값을 sum 변수에 더하고, 전달받은 파라미터를 10으로 나눈 몫을 다시 x로 처리하는 while문을 돈다.

- 함수의 결과로 모든 숫자들의 자릿수 합이 sum으로 반환된다.

- 임의의 값 max를 가장 작은 값으로 설정하고, 배열에서 하나씩 꺼내보면서 digit_sum(x)함수를 실행한 결과가 max 보다 크다면, max에 digit_sum(x)를 대입하고, 최종 결과값인 res에 가장 큰 자릿수의 합으로 이루어진 x를 배정한다.

 

②문자열 처리방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
### 문자형 처리 방법 ###
import sys
sys.stdin=open("input.txt""r")
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=-2147000000
for x in a:
    # x라는 리스트의 각 자릿수의 합을 구하는 함수 사용
    tot=digit_sum(x)
    if tot>max:
        max=tot
        # 가장 큰 값이 res에 배정
        res=x
print(res)
 
cs

 

- 하단은 위에 코드와 똑같지만, digit_sum(x) 함수를 구성하는 부분에서 다르게 로직을 설계했다.

- for i in str(x) :  x로 받은 리스트를 문자열로 하나씩 i에 배정하고, 이를 sum에 그대로 더하는 반복문을 작성했다.

 

📚 참고

go-hard.tistory.com/96

 

[python] 파이썬 각 자리수 분리, 더하기

파이썬에서 각 자리숫자를 분리하는 방법은 여러가지가 있으며, 소개해드릴 방법은 문자열로 변환 후 분리하는 방법, 10으로 나누어서 수행하는 방법, map함수를 이용하여 자리수 별 더하는 방법

go-hard.tistory.com

 

Comments