본문 바로가기
코딩테스트

프로그래머스 Javascript 코딩 테스트 Lv.0 숨어있는 숫자의 덧셈

by 곰인간 2023. 8. 15.

숨어있는 숫자의 덧셈

문제를 보면 my_string이 매개변수로 주어지고,

my_string안의 모든 자연수들의 합을 return하라고 한다.

대신에 연속된 숫자는 ex. 111이면 111이 아닌 1,1,1 이다.

my_string에는 숫자만 있는게 아닌 문자와 섞여있는 문자열 형태이고,

처음 이를 해결하기 위해서 정규 표식을 가져다 사용했다. 

function solution(my_string) {
    const regex = /[^0-9]/g;
    const number = my_string.replace(regex, "").split('')
    const result = number.map(Number)
    return result.reduce((a, b) => a + b)
}

 

정규 표현식을 사용해서 숫자가 아닌건 모두 찾는 패턴

replace를 이용해서 숫자가 아니면 없애고, (첫 예제로 보면 이때 my_string은 "1234")

split을 이용해서 "1234"를 배열의 형태로 쪼개준다. (["1", "2", "3", "4"])

그리고 map메서드를 이용해서 문자열을 숫자열로 변경

["1", "2", "3", "4"]를 [1, 2, 3, 4]로

reduce를 사용해서 [1, 2, 3, 4]의 모든 값을 더 해준다.


function solution(my_string) {
    return [...my_string].reduce((a, b) => Number(b) ? a + +b : a,0)
}

위에 풀이와 다른 점은 reduce를 이용해서 간단하게 바로 푸는 방법이다.

my_string을 전개연산자를 이용해서 배열의 형태로 만들고

reduce를 사용해서 더하는데, a는 누산기이고, b는 현재 값이다

삼항 연산자를 이용해서

Number(b)가 숫자면 누산 + 현재 인데,

보면 a + +b의 형태로 되어있다.

+단항 연산자를 이용해서 my_string 배열에 있는 문자열 숫자를 숫자열로 변경하는 부분이다.

단항 연산자는 피연산자 앞에 붙으면 피연산자를 숫자열로 변경한다.

그냥 a + b이면 0 + "1" 이 되버린다. (결과값이 "01234"가 된다.)

하지만 단항 연산자를 사용하면, Number를 사용하지 않고 간단하게

0 + 1이 된다. (결과값은 0 + 1 + 2 + 3 + 4 = 10)

그리고 Number(b)가 숫자가 아니면 0을 반환한다.

 

댓글