Algorithm/프로그래머스: 기초 트레이닝
[프로그래머스] 마지막 두 원소 (Javascript)
집으로 감자
2025. 2. 15. 12:03
문제
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
요구사항
정수 리스트 num_list가 주어질 때, 마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을 마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을 추가하여 return하도록 solution 함수를 완성해주세요.
제한조건
- 2 ≤ num_list의 길이 ≤ 10
- 1 ≤ num_list의 원소 ≤ 9
입출력
num_list result [2, 1, 6] [2, 1, 6, 5] [5, 2, 1, 7, 5] [5, 2, 1, 7, 5, 10]
내가 생각한 로직
1. 인덱스를 이용해서 배열의 마지막에 있는 숫자와 바로 앞에 있는 숫자를 구한다.
2. 삼항연산자를 이용해서 num_list 마지막에 조건에 맞는 숫자를 넣어준다.
내가 구현한 코드
function solution(numList) {
const lastIdx = numList.length - 1;
const lastNum = numList[lastIdx]
const beforeNum = numList[lastIdx - 1]
lastNum > beforeNum ? numList.push(lastNum - beforeNum) : numList.push(lastNum*2);
return numList;
}
한 줄로 코드를 작성해 버리기보다
코드를 여러 줄을 쓰게 되더라도 분명한 의미를 갖는 변수를 작성하는데 중점을 두었다.
처음 코드를 본 사람도 변수명만 보고 바로 이해할 수 있게 작성하고 싶었다.
function solution(numList) {
numList[numList.length - 1] > numList[numList.length - 2] ? numList.push(numList[numList.length - 1] - numList[numList.length - 2]) : numList.push(numList[numList.length - 1]*2);
return numList;
}
변수를 사용하지 않고 줄줄이 쓰게 되면 다음과 같이 되어 버린다.
옆으로 끝없이 넘기면서 코드를 읽어야 한다.
다른 해결방법
function solution(num_list) {
const [a, b] = [...num_list].reverse();
return [...num_list, a > b ? (a-b):a*2];
}
글을 쓰게 된 이유는 이 코드 때문이라고 말할 수 있다.
이렇게 생각해서 코드를 쓸 수 있다는 점에 놀랐었다.
배열을 뒤집어서 앞쪽에 있는 2개의 숫자를 바로 꺼내서 쓸 생각을 했다는 게 신기했다.
const [a, b] = [...num_list].reverse();
num_list의 순서를 뒤집어주면, 맨 마지막의 숫자가 맨 앞으로 오게 된다.
구조분해 할당을 통해 맨 마지막이었던 숫자와 바로 앞에 있던 숫자를 바로 꺼내올 수 있다.
반응형