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

[프로그래머스] 배열의 길이에 따라 다른 연산하기

Ryomi 2024. 12. 9. 22:24
728x90
반응형

24년 12월 9일
해결한 문제 갯수: 36

 

문제 설명

 

문제 분석

- arr의 길이가 홀수라면, arr의 모든 짝수 index 위치에 n을 더한 배열을 반환합니다.

- arr의 길이가 짝수라면, arr의 모든 홀수 index 위치에 n을 더한 배열을 반환합니다. 

- 나머지 요소는 그대로 유지합니다. 

 

첫 번째 접근: 조건문을 사용해 요구사항을 그대로 옮겨보기

function solution(arr, n) {
    let isOddLength = arr.length % 2
    
    return arr.map((item, i) => {
        if(isOddLength && !(i % 2)) {
            return item + n
        } else if(!isOddLength && i % 2) {
            return item + n
        }
        
        return item
    })
}

문제의 요구사항에 맞춰 순서대로 코드를 작성했습니다. 

1. isOddLength: arr의 길이가 홀수인지를 판단하는 Boolean type의 변수를 선언합니다. 

2. map : 배열의 각 원소를 순회하며 조건에 따라 값을 변환합니다. 

- 배열의 길이가 홀수(idOddLength가 true)이고 인덱스가 짝수(!(i % 2))인 경우

- 배열의 길이가 짝수(idOddLength가 true)이고 인덱스가 홀수(i % 2)인 경우

- 조건에 해당하는 경우, 해당 원소에 n을 더하고, 그렇지 않으면 원래 값을 반환합니다. 

 

두 번째 접근: 로직 단순화

function solution(arr, n) {
    return arr.map((item, i) => {
        return arr.length % 2 !== i % 2 ? item + n : item
    })
}

변경사항

- 두 개의 조건문을 하나의 비교연산으로 통합했습니다.

- 복잡한 논리 구조를 단순한 수식으로 표현했습니다.

- 이전엔 선언된 불필요한 변수(isOddLength)를 제거했습니다. 

728x90
반응형