[프로그래머스] 하샤드 수 split(''), map(Number) , reduce((acc, num) => acc + num, 0)

조아연·2024년 7월 8일

JavaScript 공부

목록 보기
17/24

JavaScript 코딩테스트 하샤드 수 (21일)

하샤드 수

String(x).split('') 를 통해 정수를 문자열로 바꾸고 배열로 바꾸는 거 까지는 알겠는데 각 배열을 더하려면 어떤 메서드를 써야할지 모르겠어서 gpt에게 물어봤다.

.map(Number) // 각 문자를 숫자로 변환
.reduce((acc, num) => acc + num, 0); // 숫자들을 모두 더함

첫 번째 답변

function solution(x) {
 
       if(String(x).split('').map(Number).reduce(acc,mum) => acc+num,0.x%acc==0) {
           answer = true;
       } else anwer = false
    } 
    return answer;
}

오류가 나서 gpt에게 어디가 틀린건지 물어봤다.

오타랑 오류가 있는 것 같아서, 수정하고 구성을 약간 바꾸었다.
변수 i를 선언하여 먼저 자리수의 합을 구한 후 if문을 통해 하샤드 수를 구하려 했다.

두번째 답

function solution(x) {
    i = (String(x).split('').map(Number).reduce((acc,num) => acc+num,0));
    if ( x / i == 0) {
        return answer = true;
    }  else {
        return answer = false;
}
}

false만 맞고 true 은 틀리다..
그러면 if문에서 계산이 틀린 것 같아서 나머지 연산자로 바꾸었다.

세번째 답

function solution(x) {
    i = (String(x).split('').map(Number).reduce((acc,num) => acc+num,0));
    if ( x % i == 0) {
        return answer = true;
    }  else {
        return answer = false;
}
}

/를 %인 나머지 연산자로 바꾸니 문제 통과했다!

  1. 숫자를 문자열로 변환
  2. 문자열을 문자 배열로 분리
  3. 각 문자를 숫자로 변환
  4. 숫자들을 모두 더함, acc(누적값) + num(현재 배열 요소)
  5. x나누기 i 시 나머지 자리수가 0이라면 true, 그 외에는 false

다른사람들 풀이

  • eval : JavaScript에서 문자열 형태의 코드를 실행할 수 있게 해주는 함수입니다. 문자열로 작성된 JavaScript 코드를 실제 코드로 평가하여 실행합니다. 이는 매우 강력한 기능이지만, 잘못 사용하면 보안상의 위험이 있을 수 있습니다

  • join("+") : 배열의 요소들을 문자열로 연결할 때, 각 요소 사이에 +를 넣는 메서드입니다.

깨달은 점

  • let sum = String(x) // 숫자 x를 문자열로 변환합니다.

  • split('') // 문자열을 각 문자로 분리하여 배열로 만듭니다.

  • map(Number) // 배열의 각 요소를 Number 함수를 사용하여 숫자로 변환합니다.

  • reduce((acc, num) => acc + num, 0); // 배열의 모든 숫자를 합칩니다.
    acc는 누적값을 의미하고, num은 현재 배열 요소를 의미합니다. 초기값은 0입니다.

  • else 는 조건이 없다. lf나 lf else에의 조건문이 맞지 않을 경우에 else 결과로 바로 보내버린다.

profile
비전공자 QA의 자기개발 공부노트

0개의 댓글