[Javascript] LV.0 숨어있는 숫자의 덧셈(1)

은비·2023년 8월 8일
2

Programmers_CodingTest

목록 보기
26/72

문제 설명

문자열 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 + 2 + 3 + 4 = 10 을 return합니다.

입출력 예 #2

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

유의사항

  • 연속된 숫자도 각각 한 자리 숫자로 취급합니다.

✍ SOLUTION1

const solution = (my_string) => 
Array.from(my_string).filter(char => !isNaN(parseInt(char)))
.reduce((acc, num) => acc + parseInt(num), 0);

/* 내가 처음 작성한 코드이다. 
1. Array.from(my_string)을 사용하여 문자열을 배열로 변환해준다.
2. filter 메서드를 이용하여 숫자만 남기도록 필터링해준다.
3. reduce 메서드를 사용하여 남은 숫자들의 합을 구해준다.
*/

✍ SOLUTION2

const solution = (my_string) => 
[...my_string].reduce((acc,cur) => Number(cur) ? +acc + +cur : acc, 0);

/* 이건 다른 분의 풀이를 보다가 신기해서 가져와봤다.
1. [...my_string]: 문자열인 my_string을 배열로 변환한다. 
이렇게 함으로써 문자열의 각 문자를 배열 요소로 만든다.
2. reduce: 배열의 요소를 하나씩 순회하면서 콜백 함수를 실행하여 최종적인 결과를 얻는 메서드이다. 
첫 번째 인자로는 콜백 함수를 받고, 두 번째 인자로는 초기값을 설정한다. 여기서는 초기값을 0으로 설정한다.
3. Number(cur): cur이 문자열일 경우, 해당 값을 숫자로 변환한다. 숫자로 변환할 수 없는 문자는 NaN이 된다.
4. +acc + +cur: 덧셈 연산을 수행한다. +를 사용하여 숫자로 변환하여 연산을 하기 때문에 
문자열을 숫자로 변환하는 효과가 있다. 이렇게 함으로써 자연수인 경우에만 더해진다.
5. Number(cur) ? +acc + +cur : acc: 삼항 연산자를 사용하여 현재 요소가 자연수인 경우 
숫자로 변환한 값을 더하고, 아니면 누적 변수 그대로를 반환한다.
*/

출처 : 프로그래머스 스쿨 | 코딩테스트 연습

0개의 댓글