Algorithm/파이썬 알고리즘 문제풀이 강의
[코드 구현력 기르기] 6. 자릿수의 합
이숨인
2023. 3. 8. 18:05
1. 문제
2. 내 코드
-코드는 날라감..
- 대충, 몫을 이용해서 각 자릿수의 합을 구하는 방법은 생각했지만, 함수로서 구현하지 못했다 ㅠㅠ
3. 답
방법 ① 몫과 나머지 연산자 이용
n =map(int,input().split())
num_lst=list(map(int,input().split()))
def digit_sum(x):
sum=0 //각 자릿수를 합하기 위한 변수를 선언
while x>0: //x가 양수일동안
sum+=x%10 //x를 10으로 나눈 나머지를 ㄴsum에 증가
x=x//10 //x를 10으로 나눈 몫을 다시 x로 초기화
return sum
max=-2147000000 //이런 작은 수를 max의 초기값으로 설정하고
for x in num_lst:
tot=digit_sum(x) //함수에서 return받는 sum을, tot변수에 대입
if tot>max: //최대값 비교 과정
max=tot
res=x //최대가 되도록 하는 x가 출력하고자 하는 값임
print(res)
방법 ② 숫자를 문자열화 하여 접근
n =map(int,input().split())
num_lst=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 num_lst:
tot=digit_sum(x)
if tot>max:
max=tot
res=x
print(res)
>>
문자열도 각각 문자가 index를 가지고 있다고 배웠다.
함수에 인자로 들어오는 x 는, num_list에 들어있는 125,.. 이런 정수들이다.
이것들을 for문으로 하나씩 접근할 때, str으로 문자열화하는 과정에서
125의 경우, 1 2 5처럼 각각 자리를 문자로서 인지하게 된다.
이후, sum에 더해줄 때는 각각의 자리를 다시 int화 해서 더해준다. 더 쉽다.
4. 잘한점
- 각 자릿수 합하기 위해, 몫을 생각하는 로직은 비슷했다
5. 반성한 점
- 나머지 연산자는 생각하지 못했다.
- 함수를 만들고 써먹지를 못했다.
- 문자열화 하는 방식은 얼추 생각은 했지만, 시도할 생각도 안했다.
6. 새로 알게된 점
-> 몫과 나머지 연산자 활용
-> str화 하면, 자릿수 각각에 접근할 수 있다!
왜냐면 문자열의 경우, 각각 문자가 index를 가지기 때문에!