프로그래머스 / Javascript - 숨어있는 숫자의 덧셈 (1), (2)

해다·2022년 11월 9일
0

알고리즘

목록 보기
3/8

👾 숨어있는 숫자의 덧셈

숨어있는 숫자의 덧셈 (1) 문제 링크
숨어있는 숫자의 덧셈 (2) 문제 링크

📑 문제

두 문제 다 주어진 매개변수 my_string에 숨어있는 자연수들의 합을 return 하는 함수를 완성하라는 문제이다. 다만 1과 2의 차이점이 있는데...

⛔ 제한사항

  • (1)의 경우 my_string은 소문자, 대문자 그리고 한자리 자연수로만 구성되어있다는 제한사항이 있다.

  • (2)의 경우는 숫자가 연속으로 있는 경우 그것을 하나의 숫자로 간주한다. ( 1 ≤ my_string 안의 자연수 ≤ 1000 )

  • 1 ≤ my_string의 길이 ≤ 1,000

❓고려했던 점

  • isNaN(): 이 함수는 어떤 값이 NaN 값인지 판단하는데, 매개변수가 숫자가 아니면 true, 숫자이면 false를 반환하는 특징이 있다.
  • 첫 번째 문제의 경우 자연수가 한 자리로 제한되어 있었기 때문에 단순하게 해당 요소가 숫자인지 아닌지 구별하고, 그것이 숫자라면 Number()을 이용해 변환한 뒤 모조리 합하는 방법으로 알고리즘을 설계했다.
  • 두 번째 문제의 경우에는 연속된 숫자가 하나의 숫자로 간주되었기 때문에 정규 표현식을 이용했다.

💡내 풀이

// 숨어있는 숫자의 덧셈 (1)
function solution(my_string) {
    let answer = 0;
    my_string.split("").map(e => !isNaN(e)? answer += Number(e) : 0)
    return answer;
}
// 숨어있는 숫자의 덧셈 (2)

function solution(my_string) {
    // 1. 정규표현식을 사용해서 my_string의 숫자 부분을 발라낸다.
    // my_string이 "aAb1B2cC34oOp" 이라면 nums = [ '1', '2', '34' ]
    const nums = my_string.match(/[0-9]+/g);

    // 2. map()을 이용해서 nums 배열의 요소를 전부 string형태에서 number 형태로 바꾼다.
    // 3. reduce()를 이용하여 배열의 요소를 더하여 반환한다.
    return nums ? nums
                      .map(num => Number(num))
                      .reduce( (a, c) => a + c, 0) 
                : 0;
profile
잘하는 건 아닌데 포기하진 않을거야

1개의 댓글

comment-user-thumbnail
2023년 10월 6일

안녕하세요 잘 보았습니당
혹시 .reduce( (a, c) => a + c, 0) 여기서 초기값 0을 세팅하신 이유가 뭔지 알 수 있을까요?

답글 달기