본문 바로가기

프로그래머스 - 코딩테스트

[JavaScript][프로그래머스] 문자열 정수의 합


상기 문제는 약간 재밌었다.

문제를 푸는 방법이 매우 다양했다.

하지만 공통적인 flow 는 문자열을 문자배열로 변환한다음 각각 int 값으로 parse 한 뒤 각자리수의 합을 구하는 방식이다.

 

방식 1

function solution1(num_str) {
    return num_str.split('').reduce((a,b) => a + Number(b), 0);
}

console.log( "answer >>> " , solution1("123456789") );
// answer >>> 45 [정답]

split( String_val ) 함수를 통해 문자열을 문자배열로 변한한다.

그다음 reduce() 함수를 사용해 배열 내 각 자리수를 int 값으로 변환 후 모두 합해준다.

🤔 reduce() 함수에 두번째 인자는 첫번째로 계산에 던저줄 값을 지정한다. 아무것도 지정해주지 않으면 배열의 가장 첫번째 인자가 a 로써 계산에 임해지고 만약 특정 number 값을 지정해주면 해당 값이 a 로써 첫번째 계산에 임해진다. 상기 방식1 에서는 0 을 지정했기때문에 reduce 에 첫번째 round 계산은 => 0 + 1( 1은 string 배열의 첫번째 인자 ) 가 된다. 

 

방식 2

function solution2(num_str) {
    Array.from(num_str, (num) => Number(num)).reduce((a,b) => a+b);
}

console.log( "answer >>> " , solution2("123456789") );
// answer >>> 45 [정답 2]

방식2 에서는 Array 에 from() 을 활용하여 문자열을 int배열로 한번에 변환해준뒤 reduce 를 활용해 배열의 각자리수들을 합해주었다.

🤔 Array.from() 은 첫번째 param 으로 문자열을 받고 두번째 param 으로 함수를 받는다. 그리고 해당 두번째 param 함수는 문자열이 문자배열로 바뀌는 매 interation 마다 호출된다.

우리는 첫번째 param 인 문자열 num_str 을 문자배열로 바꿀때 두번째 param 으로 (num) => Number(num) 함수를 적용해 각각의 문자들이 int 로 변환되어 배열로 반환하도록 처리했다.

 

방식 3

function solution3(num_str) {
    return [...num_str].reduce((a,b) => a + Number(b), 0);
}

console.log(" answer >>> " , solution3("123456789") );
// answer >>> 45 [정답 3]

3번은 구조분해할당을 사용해 num_str 문자열을 문자배열로 변환한뒤 reduce 를 활용해 각 자리수의 합을 구했다.

simple 하다.