analogcoding

recursion 예제 연습 본문

Study JS for me/Algorithm

recursion 예제 연습

be well 2019. 5. 2. 16:58

 

재귀적으로 해결해보기.

 

sumDigits 함수는 input으로 숫자를 받고 받은 숫자의 각 자릿수의 합을 리턴한다.

음수를 받는 경우 맨 앞 자릿수는 음수로 계산한다. 

 

Ex)  input : 1148  => output : 14   (1+1+4+8)

       input : -316  => output : 4      (-3+1+6)

 

 

해결방안.

 

1. input 숫자를 양수, 음수에 따라 조건을 나눔. 

2. 각 자릿수에 접근하기 위해 문자열로 변경.

3. 한 자릿수 양수,음수의 경우 바로 input을 리턴.

4. 양수의 경우 각 자릿수의 값을 reduce를 사용해 누적 값을 리턴.

5. 음수의 경우 - 제거 후 다른 요소에서 첫요소를 뺀 값을 다시 재귀적으로 실행.
      또 음수가 나올 경우 한 자릿수가 된다면 1. 으로 , 양수가 나온다면 4.로 이동해서 값을 리턴.

 

 

 

 

먼저 음수일 때와 양수일 때 조건을 나누고 각 자릿수의 접근을 위해 toString() 으로 값 변경.

4. 를 위해 변수 2개를 지정.

한 자릿수의 경우 바로 input을 리턴.

var string = num.toString();
var stringArr;
var result;
  
  if(string[0]==='-' && string.length <= 2 || num.length === 1){
    return num;
  }

음수이면서 length 가 2 이상일 경우 , 배열로 나눠준 뒤 두번째 자릿수 값에  (두 번째 자릿수  - 첫 번째 자릿수)을 대입하고
-와 첫번째 자릿수를 잘라내고 다시 문자열로 만들어준 뒤 sumDigits( 결과 ) 재귀적으로 실행.

if(string[0]==='-' && string.length > 2){
    string = string.split('');
    string[2] = String(Number(string[2] - string[1]));
    string = string.slice(2);
    string = string.join('');
    return sumDigits(Number(string));
  }

그 외에 경우 ( 양수이거나 위 재귀적 실행을 통해 양수로 변경되었을 때 )

배열로 만든 뒤 map 함수로 각 string 을 number 로 변환시키고 reduce 함수를 사용해서 각 자리의 누적 값을 리턴한다.

else {
  string = string.split('');
  stringArr = string.map(function(ele){
  return Number(ele)});
  result = stringArr.reduce(function(acc,curr){
    return acc+curr;
    });
  }
  return result;
}

 

결과확인

 

'Study JS for me > Algorithm' 카테고리의 다른 글

recursion 예제연습3  (0) 2019.05.04
recursion 예제연습2  (0) 2019.05.02
Recursion 정의 + 예제  (0) 2019.04.29
algorithm 연습7  (0) 2019.04.28
algorithm 연습6  (0) 2019.04.28
Comments