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

혜린·2022년 1월 4일
0
post-thumbnail

🔐 문제

자연수 N이 주어지면, 각 자릿수의 합을 더해서 return하는 함수를 완성하라


🔑 풀이

function solution(n)
{
    var answer = 0;
    var m = String(n);
    
    for ( let i = 0; i < m.length; i++) {
        answer += parseInt(m[i]);
    }
    return answer;
}
  • 각 자릿수를 더해주기 위해서는 숫자인 n의 type을 string으로 바꾸어주어야 한다. String(n)을 통해 변경시켜준다
  • answer0에 자릿수를 차례로 더해준다
  • parseInt()처리를 해준 이유?
    그대로 출력해버리면 문자열로 출력된다. 숫자로 출력해주기 위해 parseInt()를 사용해주었다. Number()를 사용해도 된다.

🔑 다른풀이

function solution(n) {
	return String(n).split('').reduce((acc, cur) => acc + cur * 1, 0);
}
  • n의 type을 string으로 바꾸어준다
  • 문자열에 쓰는 메서드인 split을 사용하여, 각 자릿수 별로 쪼개 배열을 만들어준다. 123이 있다면, ['1', '2', '3'] 이런 식으로.
  • 배열에 사용하는 메서드인 reduce를 사용해 각 자릿수의 합을 구해줄 수 있다.
  • 현재 reduce메서드의 cur값은 문자열이기 때문에 숫자처리를 해주어야한다. parseInt(cur) Number(cur) cur * 1 과 같은 방법으로 처리해줄 수 있다.

💡 배운점

1. Data type 구분

  • 숫자는 .length가 적용되지도 않고, 자릿수를 쪼갤 수도 없다. 따라서 문자열로 바꾸어 주는 과정이 필요하다
  • string(숫자) * Number = Number
    string(숫자) + Number = String(숫자)

2. varlet

(1) var

  • var는 함수 레벨 스코프로, 함수가 아닌 곳에서 var를 사용해 변수를 선언하면 전역변수(어디에서든지 참조 가능한 값)로 취급한다
  • var는 중복 선언이 가능하므로 예상치 못한 문제가 생길 수 있다

(2) let

  • 블록 레벨 스코프(if, for, while과 같은 모든 코드 블록이 지역 스코프를 만든다)
  • 중복 선언이 불가능하다
profile
FE Developer

0개의 댓글