코플릿 데일리 코딩 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)
}