[프로그래머스] Lv.1 자릿수 더하기 JavaScript

Janet·2023년 2월 22일
0

Algorithm

목록 보기
23/314

문제 설명

자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

제한사항

  • N의 범위 : 100,000,000 이하의 자연수

입출력 예

Nanswer
1236
98724

입출력 예 설명

입출력 예 #1문제의 예시와 같습니다.

입출력 예 #29 + 8 + 7 = 24이므로 24를 return 하면 됩니다.


문제풀이

✅ 답안 #1

function solution(n) {
  let answer = 0;
  let str = String(n);
  for (let i = 0; i < str.length; i++) {
    answer += Number(str[i]);
  }
  return answer;
}

💡 문제풀이 과정 #1

  • Number type 즉, 숫자열에는 .length를 적용할 수 없어서 자릿수의 합계를 낼 수 없다. 그렇기에 type을 String으로 바꿔주는 작업이 먼저 필요하다.
  • 그리고 for 반복문을 통해 문자열의 index들을 모두 더해주는데, return하는 과정에서 다시 Number type으로 변환하기위해, Number()를 사용하거나 parseInt()를 사용한다.

✅ 답안 #2

function solution3(n) {
  return String(n)
    .split("")
    .reduce((acc, curr) => parseInt(acc) + parseInt(curr));
	// .reduce((acc, curr) => Number(acc) + Number(curr));
    // .reduce((acc, curr) => acc + curr * 1, 0);
}

💡 문제풀이 과정 #2

  • 1번 풀이와 마찬가지로, Number type 즉, 숫자열에는 .length를 적용할 수 없어서 자릿수의 합계를 낼 수 없다. 그렇기에 type을 String으로 바꿔주는 작업이 먼저 필요하다.
  • 다음은, split()을 이용하여 문자열을 배열로 바꿔준다. 배열의 값들을 reduce()함수를 통해 합계를 내준다. reduce의 accumulatorcurrentValue 를 그대로 더해주면 문자열이 되므로, Number() 혹은 parseInt()를 통해 Number type으로 변환한다.
  • 혹은 reduce((acc, curr) => acc + curr * 1, 0);으로 풀이 하는 방법도 있는데 여기서 acc는 문자열, curr * 1은 정수가 된다. String * Number = Number이기 때문이다. 하지만 curr의 경우는 문자열이므로, 이 경우 String + Number = String이라는 결과가 나올 것이기에 끝에 initialValue로서 0을 넣여주어 acc의 초기값을 Number type으로 적용시켜준다.
  • 만약 reduce((acc, curr) => acc + curr, 0);과 같이 초기값만 설정 하게되면 acc는 정수, curr는 문자열 즉, Number+String 조합이 되기때문에 이 역시 문자열(String)이라는 결과물이 나온다. 즉, acc와 curr를 모두 숫자 타입으로 바꾸어줘야만 결과물 역시 숫자가 나오기 때문에, curr에 * 1을 하여 정수화해주고, 초기값 0을 설정해주어 acc역시 정수화 해주는 것이다.
profile
😸

0개의 댓글