Web, View/코딩테스트 연습

[JavaScript] 카운트 업 - 181920

kaleb 2023. 12. 11. 15:57
728x90

안녕하세요 미어캣입니다.

 

오늘은 프로그래머스 기초문제 카운트 업 문제를 풀어보도록 하겠습니다.

 

문제설명 :

정수 start_num과 end_num가 주어질 때, start_num부터 end_num까지의 숫자를 차례로

담은 리스트를 return 하도록 하는 solution 함수를 완성하시오.

 

제한사항 :

0 <= start_num <= end_num <= 50

 

문제 : 

function solution(start_num, end_num) {
    var answer = [];
    return answer;
}

 

범위가 주어진 정수를 리스트에 담는 문제입니다.

 

이 문제도 다양한 풀이 방식이 존재할 것 같습니다.

 

정답 :

더보기

저는 기존의 for문을 사용하여 문제를 해결 하였습니다. (기본이 중하다...)

 

  • for 문을 활용한 풀이 방식 :
function solution(start, end) {
    let answer = [];
    if((start >= 0 && start <= end) && (end <= 50)) { // 제한사항
        
        for(let i = start; i <= end; i++) {
            answer.push(i);
        }
    }
    return answer;
}

 

하지만 기본기를 다지는 입장이기에 다른 풀이 방법도 해보았습니다.

 

  • Array.from을 활용한 풀이 방식 :
    if(start >=0 && start <= end && end <= 50) { // 제한사항
        return Array.from({length : end-start+1}, () => {return start++});
    }

 

이상하게 기존의 for문 보다 짧지만 복잡해보입니다.

 

Array.from은 객체를 받아 배열을 생성합니다. 
length라는 객체를 받는데 이는 end-start+1의 value를 가지고 있습니다.

end-start+1 는 start 부터 end까지의 범위입니다.

() => return start++ 는 배열의 각 요소마다 호출되는데 그때마다 start++ 를 반환합니다.

 

  • Array.fill을 활용한 풀이 방식 : 
    if(start >=0 && start <= end && end <= 50) { // 제한사항
        return Array(end-start+1).fill(start).map((c, idx) => idx + start);
    }

 

비슷한 방식인데 이번에는 좀 더 가시적입니다.

Array(end-start+1) : start부터 end까지의 배열을 할당하고 

fill(start)  : start라는 value를 배열에 채웁니다.

.map((c, idx) => idx + start) : 그때 채우는 start의 value는 idx만큼 증가합니다.

 

자바스립트의 Array 내장함수를 활용해봤는데 익숙치가 않아서 저는 for문이 더 가시적인 것 같네요?

 

여러분은 어떤게 더 편하신가요?

 

감사합니다. 파이팅...!

반응형