티스토리 뷰

코테이토 4기 알고리즘 스터디

- 9월 4주차 공통 과제 A 하샤드

 

🎈 문제 및 해석

 입력 받은 수가 각 자리 수의 합으로 나누어 떨어진다면 True, 아니라면 False를 반환하는 함수를 만든다.

 즉, 이 문제를 풀기 위해서는 각 자리 수의 합을 구하는 것이 중요하다.

 

✨ 문제 풀이

// JavaScript
function solution(num) {
    let tmp = num;    let digitSum=0;
    while(tmp){
        digitSum += tmp%10
        tmp = parseInt(tmp/10)
    }
    return (num%digitSum==0);
}
# python
def solution(num):
    tmp = num;    digit_sum = 0
    while(tmp):
        digit_sum += tmp%10
        tmp //= 10
    return (num%digit_sum==0)

 입력받은 수를 tmp에 복사하고, 이 tmp를 통해 각 자리수의 합을 구하기로 했다. 동시에 각 자리 수의 합을 저장할 digit_sum을 선언한다.

그러면 tmp에 %10 (10으로 나눈 나머지) 연산을 통해 가장 마지막 자리에 있는 수를 얻을 수 있고,

얻은 이후에는 10으로 나눈 몫으로 두어 한 자리씩 밀리도록 한다.

>>> tmp = 123  		# %10 연산을 통해 마지막 자리수 3을 얻을 수 있다.
>>> tmp //= 10		# 다음 자리수를 얻기 위한 tmp 업데이트
>>> tmp
>>> 12                  # %10 연산을 통해 마지막 자리수 2를 얻을 수 있다. (이후 반복)

 최종 결과로 나온 각 자리 수의 합이 기존 수에서 나누어 떨어지는 지 확인하기 위해서는 % 연산자를 사용하였으며,

'%연산 값이 0이다' 라는 식에 대한 bool 값을 반환하도록 했다.

 

 

🎯 추가

 python에는 몫 연산자(//)를 이용하여 몫을 바로 구할 수 있지만, 그 외의 언어에는 이러한 연산자가 없다. JS도 이는 마찬가지기 때문에, 나누는 연산(/) 후 정수화하는 방법을 사용한다. 따라서 JS에서는 나누는 연산(/) 후  parseInt() 메서드를 이용하여 정수화를 시켜주었다.

Comments