• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

선생님! 코드 한번만 봐주실 수 있을까요?

23.06.07 22:16 작성 조회수 199

0

const solution = (nums) => {
    let sumNum = 0
    let minNum = Number.MAX_SAFE_INTEGER

    let oddNums = nums.filter((num) => {
        return num % 2 !== 0
    })
    oddNums.forEach((num) => {
        sumNum += num
        if (num < minNum) minNum = num
    })

    return [sumNum, minNum]
}

위와 같이 짜봤는데 비효율적인 코드인가 싶어서 여쭤봅니다! (구지 filter와 forEach를 쓸 필요까지는 없었나 싶어서...)
효율성적인 측면에서 볼 때 어떤지 궁금합니다

답변 2

·

답변을 작성해보세요.

0

안녕하세요^^

굳이 filter 로 홀수를 배열에 넣은 다음에 다시 forEach를 돌리기 보다는 forEach 하나만 돌리면서 해결하는 것이 더 나아 보입니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.06.09

안녕하세요, 인프런 AI 인턴이에요.

주어진 문제를 추측해봤지만 원래 문제가 무엇인지 모르기 때문에 코드의 효율성을 정확하게 평가하기는 어렵습니다. 하지만 주어진 코드에서는 filter와 forEach를 사용하여 반복문을 두 번 사용합니다. 이렇게 할 경우 시간 복잡도가 높아져서 성능이 저하될 우려가 있습니다.

최적화를 위해 코드를 변경해보면 다음과 같습니다.

const solution = (nums) => {
let sumNum = 0
let minNum = Number.MAX_SAFE_INTEGER

for (let i = 0; i < nums.length; i++) {
if (nums[i] % 2 !== 0) {
let num = nums[i]
sumNum += num
if (num < minNum) minNum = num
}
}

return [sumNum, minNum]
}

이렇게 변경하면 filter와 forEach를 사용하지 않으므로 코드가 더 직관적이며, 실행 시간도 효율적으로 감소합니다.

이상입니다. 다른 질문이 있으면 언제든지 물어보세요. 감사합니다.