코플릿 데일리 코딩 18_numberSearch
수도코드 (문자열을 배열로 변환해서 풀이)
- 입력받은 문자열에 존자하는 숫자들의 합 / 문자열의 길이(숫자, 공백 제외) -> 반올림하여 리턴
- 입력받은 문자열이 빈문자열일 경우 0을 리턴 
- 빈문자열을 구분자로해서 str의 각각의 문자를 배열의 원소 하나씩으로 변환 split('') 
- 배열의 원소를 각각 숫자로 변환 (Number()메서드 이용하거나+를 더해서) -> 공백은 0, 문자는 NaN
- 배열의 원소가 숫자인 것들만 모아서 새로운 배열로 만들어서 원소들의 합을 구함 numberSum
- 배열의 원소가 NaN인 것들만 모아서 새로운 배열로 만들고 배열의 길이를 구함 onlyStrLength
- numberSum / onlyStrLength의 계산 결과를 반올림하여 반환함
코드
function numberSearch(str) {
  if(str === '') {
    return 0;
  }
  let numberArr = str.split('').map((item) => +item);
  let numberSum = numberArr.filter((item)=> !Number.isNaN(item)).reduce((acc, cur)=> acc+cur,0);
  let onlyStrLength = numberArr.filter((item)=> Number.isNaN(item)).length;
  return Math.round(numberSum / onlyStrLength);
}
수도코드(문자열의 요소를 순회해서 풀이)
- 문자열의 요소가 숫자인지 판단하기 위해서 숫자들의 집합을 선언한다.
- 숫자 요소를 더한 값을 저장할 변수와 문자열만을 저장할 변수를 선언한다.
- 0번 인덱스부터 문자열 마지막 인덱스까지 순회하면서 요소가 숫자인 경우에는 합계 변수에 더해주고, 문자인 경우 문자열 변수에 이어붙여준다. 
- 합계에 문자열의 길이를 나눈 값을 반올림하여 리턴한다. 
코드
function numberSearch(str) {
  if(str=== '') {
    return 0
  }
  let numberStr = '0123456789'; 
  let numberSum = 0;
  let onlyStr = '';
  for (let i = 0; i < str.length; i++) {
    if(numberStr.includes(str[i])) { 
      numberSum += Number(str[i]); 
    } else if(str[i] !== ' ') { 
      onlyStr += str[i];
    }
  }
  return Math.round(numberSum / onlyStr.length)
}