[JS]_daily coding #19

seul·2022년 6월 20일
0

Algorithm

목록 보기
18/31

코플릿 데일리 코딩 18_numberSearch


수도코드 (문자열을 배열로 변환해서 풀이)

  1. 입력받은 문자열에 존자하는 숫자들의 합 / 문자열의 길이(숫자, 공백 제외) -> 반올림하여 리턴
  2. 입력받은 문자열이 빈문자열일 경우 0을 리턴
  3. 빈문자열을 구분자로해서 str의 각각의 문자를 배열의 원소 하나씩으로 변환 split('')
  4. 배열의 원소를 각각 숫자로 변환 (Number()메서드 이용하거나 +를 더해서) -> 공백은 0, 문자는 NaN
  5. 배열의 원소가 숫자인 것들만 모아서 새로운 배열로 만들어서 원소들의 합을 구함 numberSum
  6. 배열의 원소가 NaN인 것들만 모아서 새로운 배열로 만들고 배열의 길이를 구함 onlyStrLength
  7. 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);
}

수도코드(문자열의 요소를 순회해서 풀이)

  1. 문자열의 요소가 숫자인지 판단하기 위해서 숫자들의 집합을 선언한다.
  2. 숫자 요소를 더한 값을 저장할 변수와 문자열만을 저장할 변수를 선언한다.
  3. 0번 인덱스부터 문자열 마지막 인덱스까지 순회하면서 요소가 숫자인 경우에는 합계 변수에 더해주고, 문자인 경우 문자열 변수에 이어붙여준다.
  4. 합계에 문자열의 길이를 나눈 값을 반올림하여 리턴한다.

코드

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])) { //숫자들의 집합에 str[i]가 포함되어 있을 경우, str[i]는 숫자
      numberSum += Number(str[i]); //str[i]는 문자열 타입이기때문에 숫자로 형변환을 해준다.
    } else if(str[i] !== ' ') { //숫자가 아니면서 공백도 아닌 경우(문자인 경우)  
      onlyStr += str[i];
    }
  }
  return Math.round(numberSum / onlyStr.length)
}
profile
Connecting dots

0개의 댓글