whatisthis?

[프로그래머스] 짝수와 홀수 - JavaScript 본문

ALGORITHM/PROGRAMMERS

[프로그래머스] 짝수와 홀수 - JavaScript

thisisyjin 2022. 7. 6. 17:21

javascript

문제 설명

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

제한 조건

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

예시

입출력 예

N        answer
123        6
987        24

입출력 예 설명

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

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


내가 작성한 코드

function solution(n)
{
    let sum = 0;
    for (let num of String(n)) {
        sum += +num;
    }
    return sum;
}

삼항 연산자를 이용하여 'Even'과 'Odd'중에 하나를 리턴한다.

실행 결과

테스트 1 〉    통과 (0.05ms, 30.1MB)
테스트 2 〉    통과 (0.05ms, 30.2MB)
테스트 3 〉    통과 (0.05ms, 30MB)
테스트 4 〉    통과 (0.05ms, 30.2MB)
테스트 5 〉    통과 (0.05ms, 29.9MB)
테스트 6 〉    통과 (0.08ms, 30.3MB)
테스트 7 〉    통과 (0.05ms, 29.9MB)
테스트 8 〉    통과 (0.05ms, 30.2MB)
테스트 9 〉    통과 (0.05ms, 30.1MB)
테스트 10 〉    통과 (0.06ms, 30.2MB)
테스트 11 〉    통과 (0.05ms, 30.1MB)
테스트 12 〉    통과 (0.05ms, 29.9MB)
테스트 13 〉    통과 (0.05ms, 30.1MB)
테스트 14 〉    통과 (0.05ms, 30.1MB)
테스트 15 〉    통과 (0.14ms, 30.1MB)
테스트 16 〉    통과 (0.05ms, 29.9MB)
테스트 17 〉    통과 (0.06ms, 30MB)
테스트 18 〉    통과 (0.05ms, 30MB)
테스트 19 〉    통과 (0.06ms, 30.2MB)
테스트 20 〉    통과 (0.05ms, 29.9MB)
테스트 21 〉    통과 (0.05ms, 30.1MB)

다른 방법

function solution(n)
{
    return Array.from(String(n)).map(x => Number(x)).reduce((prev, cur) => prev + cur);
}

배열의 합을 구하는 reduce 메서드를 이용한 방법이다.

실행 결과

테스트 1 〉    통과 (0.08ms, 30.2MB)
테스트 2 〉    통과 (0.09ms, 30.1MB)
테스트 3 〉    통과 (0.06ms, 30.1MB)
테스트 4 〉    통과 (0.09ms, 30.2MB)
테스트 5 〉    통과 (0.06ms, 30.2MB)
테스트 6 〉    통과 (0.06ms, 30.2MB)
테스트 7 〉    통과 (0.05ms, 30.2MB)
테스트 8 〉    통과 (0.06ms, 30.3MB)
테스트 9 〉    통과 (0.11ms, 29.9MB)
테스트 10 〉    통과 (0.07ms, 30.3MB)
테스트 11 〉    통과 (0.06ms, 30.1MB)
테스트 12 〉    통과 (0.09ms, 30.3MB)
테스트 13 〉    통과 (0.06ms, 29.8MB)
테스트 14 〉    통과 (0.06ms, 30MB)
테스트 15 〉    통과 (0.10ms, 30.3MB)
테스트 16 〉    통과 (0.06ms, 30.1MB)
테스트 17 〉    통과 (0.06ms, 30.2MB)
테스트 18 〉    통과 (0.06ms, 30MB)
테스트 19 〉    통과 (0.09ms, 30.2MB)
테스트 20 〉    통과 (0.07ms, 30.1MB)
테스트 21 〉    통과 (0.05ms, 30.2MB)

reduce 메서드를 실행하기 전에 map으로 String 을 Number로 바꿔주는 과정이 필요하다보니
성능은 별로인듯 하다.

+) 참고로, 아래와 같이 reduce 자체에서 Number을 해봤는데, 테스트 21에서 실패했다.

return Array.from(String(n)).reduce((prev, cur) => Number(prev) + Number(cur));