프로그래머스 자릿수 더하기

김금동·2021년 11월 12일
0

알고리즘

목록 보기
8/12

https://programmers.co.kr/learn/courses/30/lessons/12931

function solution(n){

    return String(n).split('').reduce((acc,val)=>acc + Number(val),0)
}  

극한의 한줄충 풀이
reduce를 써서 자릿수들을 더해줬다

다른 풀이보면 String(n)대신 (n+'')를 해줬고
Number(val)대신 parseInt(val)를 해줬다

차이를 살펴보자

1.Number()와 parseInt()
Number()는 string이 숫자로만 이루어져야 숫자로 나오고
parseInt()는 string이 숫자로시작해서 숫자가 나오는 부분까지만 숫자로 나온다

Number('13') = 13
Number('13.13') = 13.13
Number('12.00') = 12
Number('13회') = NaN
예외적으로
Number('') = 0
Number(null) = 0

parseInt('13') = 13
parseInt('13.13') = 13
parseInt('12.00') = 12
parseInt('13회') = 13
parseInt('회13') = NaN
parseInt('13*3') = 13
뿐만아니라 parseInt(string, radix)여서
parseInt('1101',2) = 13 로 진수표현까지 가능
parseInt('1102',2) = 6 (2진수여서 2가 안먹힘)
parseInt('2101',2) = NaN

기능상 Number()가 parseInt()보다 빠르다고 하므로
지금은 string안에 숫자로만 이루어졌기 때문에 Number()를 쓰자

2.(n).toString(), String(n),${} ,n+''
https://hianna.tistory.com/491
여기 잘 나와있다.
String()도 괜찮을 거 같기도한데 n+''이 제일 잘 쓰인다니까 이걸로 쓰자 toStirng()은 진법을 고려해서 toStirng()쓰는 건 좀 느릴 거 같다

function solution(n) {
  const nList = (n + "").split("");
  let sum = 0;
  for (let i = 0; i < nList.length; i++) {
    sum += Number(nList[i]);
  }
  return sum;
}

reduce버리는 풀이 속도면에서 for문이 더 빠르지 않을까 싶지만 확실히 가독성은 reduce가 좋은듯하다

profile
나원래chu해

0개의 댓글