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

Janet·2023년 4월 6일
0

Algorithm

목록 보기
119/314

문제 설명

문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.


제한사항

  • 1 ≤ my_string의 길이 ≤ 1,000
  • my_string은 소문자, 대문자 그리고 한자리 자연수로만 구성되어있습니다.

입출력 예

my_stringresult
"aAb1B2cC34oOp"10
"1a2b3c4d123"16

입출력 예 설명

입출력 예 #1

  • "aAb1B2cC34oOp"안의 한자리 자연수는 1, 2, 3, 4 입니다.

문제풀이

💡 문제풀이 과정

  • 답안 1번: match()정규식을 사용하여 숫자로 된 문자들을 배열 형태로 만들어 reduce((a, b) ⇒ Number(a) + Number(b));로 숫자들의 합계를 리턴한다. match() 대신 replace()를 이용할 수도 있는데 match()는 배열 형태로 값을 리턴하지만, replace()는 문자열 형태로 반환하기에 split(””)을 사용하여 배열 형태로 변환하여야 한다. 다음 예제 참고 ⬇️
let my_string = "aAb1B2cC34oOp";
    
console.log(my_string.match(/\d/g)); // ['1', '2', '3', '4']
console.log(my_string.match(/[0-9]/g)); // ['1', '2', '3', '4']
console.log(my_string.replace(/[^0-9]/g, "")); // 1234
console.log(my_string.replace(/[^\d]/g, "")); // 1234
console.log(my_string.replace(/[^0-9]/g, "").split("")); // ['1', '2', '3', '4']
  • 답안 2번: my_string을 배열 형태로 복사하여 filter()를 통해 !isNaN(’is Not A Number’ = 숫자인 것)을 찾아 배열로 반환하면 reduce()를 이용하여 숫자들의 합계를 낸다.
  • 답안 3번: reduce() 함수 하나만으로 my_string의 문자열에서 숫자들만 찾아내어 합계를 내는 방법이다. reduce((acc, cur) ⇒ (Number(cur) ? acc + +cur : acc), 0); Number(cur)NaN가 아니면 (=숫자이면) 초기값 0+cur(Number(cur))를 더한다.

✅ 답안 #1

function solution(my_string) {
  return my_string.match(/\d/g).reduce((a, b) => Number(a) + Number(b));
}

✅ 답안 #2

function solution(my_string) {
  return [...my_string]
    .filter((v) => !isNaN(v))
    .reduce((a, b) => Number(a) + Number(b));
}

✅ 답안 #3

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

0개의 댓글