코딩 테스트 공부

프로그래머스 자바스크립 코딩 기초 트레이닝 - 조건에 맞게 수열 변환하기 1 (&& 연산자, map()메서드)

dev_in 2026. 1. 2. 15:18

문제

정수 배열 arr가 주어집니다. arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱합니다. 그 결과인 정수 배열을 return 하는 solution 함수를 완성해 주세요.

 

제한사항

  • 1 ≤ arr의 길이 ≤ 1,000,000
    • 1 ≤ arr의 원소의 값 ≤ 100

 

고민한 점 & 해결 과정

 

조건이 50보다 크고 작은지, 그리고 짝수인지 홀수인지 두 가지로 한번에 판단하기 위해 and연산자(&&)를 사용하며 각각의 조건에 따라 결과를 return하는 방법으로 접근했습니다.

function solution(arr) {
    let result = [];
    for (const i of arr) {
        if (i >= 50 && i%2 === 0) {
            result.push(i/2)
        } else if 
            (i < 50 && i%2 !== 0) {
            result.push(i*2)
            } else {
                result.push(i)
            }
    }
    return result;
}

 

해당 코드로도 문제는 해결할 수 있었지만 조건들을 적느라 if문, else if문, else문이 있어서 코드가 지저분해 보였습니다. 다른 사람들의 코드를 참고하며 어떻게 가독성 좋게 바꿔볼 수 있을 지 고민했습니다.

 

<프로그래머스 다른 사람의 코드>

function solution(arr) {
    return arr.map(num => {
        if(num >= 50 && !(num % 2)) return num / 2;
        if(num < 50 && num % 2) return num * 2;
        return num;
    })
}

 

해당 코드를 살펴보니, 굳이 빈 배열을 생성하지 않아 매번 push해 줄 필요가 없었고 map()메서드를 통해 arr를 효율적으로 돌며 블록 하나안의 if문 두 줄 만으로 해결할 수 있다는 걸 깨달았습니다.

최종 결과 및 느낀 점

문제를 해결하는 것도 좋지만, 효율적이고 가독성 좋은 코드를 위해 다른 코드를 참고해보는 것도 중요하다는 것을 깨달았습니다.