문자열 배열 intStrs와 정수 k, s, l가 주어집니다. intStrs의 원소는 숫자로 이루어져 있습니다.
배열 intStrs의 각 원소마다 s번 인덱스에서 시작하는 길이 l짜리 부분 문자열을 잘라내 정수로 변환합니다. 이때 변환한 정수값이 k보다 큰 값들을 담은 배열을 return 하는 solution 함수를 완성해 주세요.
제한사항
function solution(intStrs, k, s, l) {
return intStrs.map((el) => +el.slice(s, s+l)).filter(v => Number(v) > k)
}
function solution(intStrs, k, s, l) {
return intStrs.reduce((bucket, intStr) => {
const v = Number(intStr.slice(s, s + l))
if (v > k) bucket.push(v)
return bucket
}, [])
}
나는 당연하게 map()과 filter()를 생각했는데 reduce()를 사용하신 분이 있어서 신기해 풀이를 가져와봤다. reduce()를 가지고 배열을순회하여 조건에 맞는 값을 반환한다.
function solution(intStrs, k, s, l) {
var answer = [];
intStrs.forEach(el=>{
const num = +el.substr(s,l);
if( num > k) answer.push(num);
})
return answer;
}
이 코드에서는 forEach() 메서드를 사용했다.