[프로그래머스] Lv.0 숨어있는 숫자의 덧셈 (2) JavaScript

Janet·2023년 4월 14일
0

Algorithm

목록 보기
144/314

문제 설명

문자열 my_string이 매개변수로 주어집니다. my_string은 소문자, 대문자, 자연수로만 구성되어있습니다. my_string안의 자연수들의 합을 return하도록 solution 함수를 완성해주세요.


제한사항

  • 1 ≤ my_string의 길이 ≤ 1,000
  • 1 ≤ my_string 안의 자연수 ≤ 1000
  • 연속된 수는 하나의 숫자로 간주합니다.
  • 000123과 같이 0이 선행하는 경우는 없습니다.
  • 문자열에 자연수가 없는 경우 0을 return 해주세요.

입출력 예

my_stringresult
"aAb1B2cC34oOp"37
"1a2b3c4d123Z"133

입출력 예 설명

입출력 예 #1

  • "aAb1B2cC34oOp"안의 자연수는 1, 2, 34 입니다. 따라서 1 + 2 + 34 = 37 을 return합니다.

입출력 예 #2

  • "1a2b3c4d123Z"안의 자연수는 1, 2, 3, 4, 123 입니다. 따라서 1 + 2 + 3 + 4 + 123 = 133 을 return합니다.

문제풀이

💡 문제풀이 과정

  • 답안 1번: 문자열에 replace()를 사용하여 숫자를 제외한 모든 알파벳 문자들을 대체하기로 했다 my_string.replace(/\D/g, “-”)하면 —-1-2—34—- 이런 식의 문자열로 반환된다. reduce()를 통해 합계를 내기위하여 split(”-”)하면 “-”‘’(빈 값)이 되고, 숫자들만 배열 형태로 남는다. 마지막으로 reduce((a, b) ⇒ a + Number(b), 0); 하여 숫자 타입으로 변환 후 합계를 낸다.
    • 참고로 \D는 숫자가 아닌 문자들을 뜻하며, replace(/[A-z]/g, "-")처럼 알파벳 대,소문자로 지정해줘도 된다.
  • 답안 2번: 사실.. replace()없이 split()에 정규식을 사용하여 더 간단한 풀이가 가능했다. split(/\D/); 혹은 split(/[A-z]/); 하면 숫자를 제외한 문자들은 모두 빈 값이 되기에.. 예시) ['', '', '', '1', '2', '', '34', '', '', '']

✅ 답안 #1

let my_string = "aAb1B2cC34oOp";

function solution(my_string) {
  return my_string
    .replace(/\D/g, "-")
    // 숫자를 제외한 모든 문자를 "-"로 대체. 예시: ---1-2--34---
    .split("-")
    // "-"를 기준으로 분할. 예시: ['', '', '', '1', '2', '', '34', '', '', '']
    .reduce((a, b) => a + +b, 0);
    // a + Number(b)로 숫자로 타입 변경 후 합계
}

✅ 답안 #2

function solution(my_string) {
  return my_string.split(/\D/).reduce((a, b) => a + +b, 0);
}
profile
😸

0개의 댓글