일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 28 | 29 | 30 | 31 |
- 예술영화추천
- 장고 프로젝트
- 장고 프로젝트 순서
- 북마크만들기
- MyPick31
- 북마크앱
- JavaScript
- MYSQL
- 프로젝트
- 파이썬 웹프로그래밍 장고
- python
- Django Blog
- 독립영화플랫폼
- 개발
- Bookmark
- Django
- til
- Algorithm
- ART_Cinema
- mongodb
- Blog
- join()
- 장고 개발 순서
- Node.js
- 자바스크립트
- passport.js
- 장고
- 타사인증
- 알고리즘
- Exercism
- Today
- Total
Juni_Dev_log
(인프런) 파이썬 알고리즘 문제1-6 "자릿수의 합" 본문
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(int, str(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에 그대로 더하는 반복문을 작성했다.
📚 참고
'CodingTest > 인프런 (Algorithm)' 카테고리의 다른 글
(인프런) 파이썬 알고리즘 문제1-8 "뒤집은 소수" (0) | 2021.02.18 |
---|---|
(인프런) 파이썬 알고리즘 문제1-7 "소수(에라토스테네스 체)" (0) | 2021.02.17 |
(인프런) 파이썬 알고리즘 문제1-5 "정다면체" (0) | 2021.02.16 |
(인프런) 파이썬 알고리즘 문제1-4 "대표값" (0) | 2021.02.13 |
(인프런) 파이썬 알고리즘 "최솟값 구하기" 개념정리 (0) | 2021.02.13 |