[js] 배열 만들기 5

sookyoung.k·2024년 6월 7일
1
post-thumbnail

문자열 배열 intStrs와 정수 k, s, l가 주어집니다. intStrs의 원소는 숫자로 이루어져 있습니다.

배열 intStrs의 각 원소마다 s번 인덱스에서 시작하는 길이 l짜리 부분 문자열을 잘라내 정수로 변환합니다. 이때 변환한 정수값이 k보다 큰 값들을 담은 배열을 return 하는 solution 함수를 완성해 주세요.

제한사항

  • 0 ≤ s < 100
  • 1 ≤ l ≤ 8
  • 10l - 1 ≤ k < 10l
  • 1 ≤ intStrs의 길이 ≤ 10,000
    • s + l ≤ intStrs의 원소의 길이 ≤ 120

나의 풀이

function solution(intStrs, k, s, l) {
    return intStrs.map((el) => +el.slice(s, s+l)).filter(v => Number(v) > k)
}
  • 입력받은 배열을 map() 메서드를 사용하여 s번 인덱스에서부터 l크기 만큼 부분 문자열을 잘라내 정수로 변환한다.
  • filter()메서드를 사용하여 배열의 요소가 k보다 큰 값들만 걸러내어 반환한다.

다른 풀이 1

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()를 가지고 배열을순회하여 조건에 맞는 값을 반환한다.

  • reduce() 메서드를 사용하여 intStr 배열을 순회한다.
  • 각 문자열 intStr에 대해 작업을 수행한다.
    • intStr의 s인덱스부터 s + l 인덱스까지의 부분 문자열을 추출한다.
    • 추출한 문자열을 숫자로 변환한 후, 변환된 숫자가 k보다 크면 bucket 배열에 추가한다.
  • 최종적으로 bucket 배열을 반환한다.

다른 풀이 2

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() 메서드를 사용했다.

  • forEach() 메서드로 intStr 배열을 순회한다.
  • 부분 문자열을 추출하고, 숫자로 변환한 뒤, k보다 큰 수만 answer 배열에 넣는다.
  • 최종 answer 배열을 반환한다.
profile
영차영차 😎

0개의 댓글