일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 연습
- react
- 코드스테이츠
- 공부
- grpahQL
- 엔퀸즈
- Instantiation Patterns
- 알고리즘
- 취업
- nqueens
- underscores
- 제일어려워
- ftech
- 해커톤
- vscode
- 초보
- 포스기
- DOM
- JavaScript
- method
- this
- JS
- underbar
- 자바스크립트
- 일상
- 코딩
- array
- 리액트
- 클라이언트
- 개발
- Today
- Total
analogcoding
recursion 예제 연습 본문
재귀적으로 해결해보기.
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 |