알고리즘: numberSearch

Kyoorim LEE·2022년 6월 20일
0

알고리즘TIL

목록 보기
6/40

문제

문자열을 입력받아 문자열에서 숫자를 모두 찾아 더한 뒤에 해당 값을 (숫자와 공백을 제외한 나머지) 문자열의 길이로 나눈 값을 정수로 반올림하여 리턴해야 합니다.

입력

인자1 : str

string 타입의 문자열

출력

number 타입을 리턴해야 합니다 (0 이상의 정수)

주의 사항

  • 빈 문자열을 입력받은 경우, 0을 리턴해야 합니다.
  • 숫자(digit)는 연속해서 등장하지 않습니다.

입출력 예시

let output = numberSearch('Hello6 ');
console.log(output); // --> 1

output = numberSearch('Hello6 9World 2,');
console.log(output); // --> 2

output = numberSearch('Hello6 9World 2, Nic8e D7ay!');
console.log(output); // --> 2

힌트

  • 주어진 문자(길이 1의 문자열)이 숫자(digit)인지 판단하는 방법은 여러 가지 입니다.
  • 그 중 하나는 해당 문자가 숫자들의 집합(문자열 또는 배열)에 속하는 지를 판단하는 것입니다.
  • 이와 관련해서 js includes를 검색해 봅니다.

풀이

  1. 숫자가 담긴 newStr을 하나 선언하고
  2. str[i]번째와 일치하는 것이 있는지 확인 => includes
  3. 공백이 아니거나 숫자가 아닌경우를 제외한 순수 str을 구하고
  4. 순수 str의 길이를 구해 Math.round를 이용해 계산
function numberSearch(str) {
  const digits = '0123456789';

  if (str === '') {
    return 0;
  }

  let sum = 0;
  let pureStr = '';
  for (let i = 0; i < str.length; i += 1) {
    if (digits.includes(str[i])) {
      sum = sum + Number(str[i]);
    } else if (str[i] !== ' ') {
      pureStr = pureStr + str[i];
    }
  }

  return Math.round(sum / pureStr.length);
}

한 줄평

  • 숫자가 담긴 newStr을 구하기 위해 parseInt로 접근을 했으나 'hello9'인 경우 parseInt에 넣으면 NaN이 도출됨으로 잘못된 방식
  • digits라는 새로운 str을 선언해 includes를 이용해 그 안에 str[i]가 있는지 확인하는 것이 관건이었음
profile
oneThing

0개의 댓글