새소식

Algorithm/파이썬 알고리즘 문제풀이 강의

[코드 구현력 기르기] 6. 자릿수의 합

  • -

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를 가지기 때문에!

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.