[프로그래머스] Lv.1 - 하샤드 수(feat.reduce)

dev.galim·2023년 4월 14일
0
post-thumbnail

문제 설명

문제 풀이

function solution(x) {
    var answer = true;
    const test = String(x).split('');
    const num = test.reduce((a,b) => Number(a) + Number(b), 0);
    
    if(x % num === 0) {
        answer = true;
    } else {
        answer = false;
    }
    
    return answer;
}

이 문제를 보고 split을 이용하여 숫자를 나누고 더한 뒤, 자연수를 그 값으로 나누면 되겠다고 생각하였다.
처음엔 if문과 map을 사용하여 문제를 풀었는데 계속 테스트 몇개가 틀렸다고 나와서 혹시나 하는 마음에 reduce를 사용해보았는데 통과되었다...
비슷한 로직으로 풀었는데 아직도 어느 부분이 문제였는지 잘 모르겠다..
의문점을 품은채 다른 풀이를 보았는데 정말 충격 그 자체였다.

다른 풀이

function Harshad(n){
  return !(n % (n + "").split("").reduce((a, b) => +b + +a ));
}

내가 6줄가량으로 푼 문제가 한줄로 끝나다니..
나름대로 이 한줄의 코드를 해석해보았다

  • (n + "") ➡️ 숫자를 문자로 바꿈
  • split("") ➡️ 문자를 한글자씩 분리
  • reduce((a, b) => +b + +a)) ➡️ 분리된 문자를 다시 숫자로 바꾸고 더함
    난 지금까지 Number()를 사용하여 문자를 숫자로 바꿔서 이렇게 +를 사용하여 바꿀 수 있다는걸 보고 너무 놀랐다.. 다시 생각해보면 당연한건데 😅
  • n % ➡️ 자연수를 앞서 더한 숫자로 나눈다.
  • ! ➡️ true or false

난 아직 문제 풀기에 급급한 실력이라 이런 코드를 보면 너무 경이롭다고 느껴진다..
계속해서 코드를 짧게 줄이는 실력을 길러야겠다

profile
열심히 해볼게요

0개의 댓글