자료구조 및 알고리즘/JavaScript Practice

[프로그래머스] 배열 만들기 5

Ryomi 2024. 12. 11. 21:33
728x90
반응형

24년 12월 10일
해결한 문제 갯수: 23

 

문제 설명

 

 

문제 분석

- 문자열 배열 intStrs의 각 원소에서 인덱스 s부터 길이 l만큼의 부분 문자열을 추출합니다.

- 추출된 문자열을 숫자로 변환합니다.

- 변환된 숫자가 k보다 큰 경우만 선택하여 새 배열을 생성합니다.

 

 

첫 번째 접근: map과 filter 조합

function solution(intStrs, k, s, l) {
    return intStrs.map(n => {
        let num = Number(n.slice(s, s + l))
        return num > k ? num : 0
    }).filter(a => a)
}

 

  • map을 사용하여 각 문자열을 처리:
    • slice(s, s + l)로 부분 문자열 추출
    • Number()로 문자열을 숫자로 변환
    • 조건부 연산자로 k보다 큰 경우만 선택, 나머지는 0으로 설정
  • filter로 0이 아닌 값(truthy)만 선택

 

- 위 접근에서는 배열에 로직에 불필요한 0이 포함된다는 단점이 있습니다.

 

두 번째 접근: reduce를 활용한 방법

function solution(intStrs, k, s, l) {
    return intStrs.reduce((answer, n) => {
        let num = Number(n.slice(s, s + l))
        
        if(num > k)answer.push(num)
        
        return answer
    }, [])
}

변경사항

- 조건을 만족하는 숫자만 배열에 추가해 불필요한 요소를 배열에 추가하지 않았습니다. 

 

세 번째 접근: 최적화된 map과 filter

function solution(intStrs, k, s, l) {
    return intStrs.map(n => Number(n.slice(s, s + l))).filter(a => a > k)
}

변경사항

- 로직을 더욱 간결하게 표현하여 가독성을 높였습니다. 

728x90
반응형