본문 바로가기
알고리즘/Programmers

[TIL] 2023.05.13 Programmers_마지막 두 원소

by heereal 2023. 5. 13.

마지막 두 원소

문제 설명

정수 리스트 num_list가 주어질 때, 마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을 마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을 추가하여 return 하도록 solution 함수를 완성해 주세요.

 

 

입출력 예

num_list result
[2, 1, 6] [2, 1, 6, 5]
[5, 2, 1, 7, 5] [5, 2, 1, 7, 5, 10]

입출력 예 #1

  • 마지막 원소인 6이 그전 원소인 1보다 크기 때문에 6 - 1인 5를 추가해 return 합니다.

입출력 예 #2

  • 마지막 원소인 5가 그전 원소인 7보다 크지 않기 때문에 5의 두 배인 10을 추가해 return 합니다.

 

나의 풀이

function solution(num_list) {
    let prev = num_list[num_list.length - 2];
    let next = num_list[num_list.length - 1];
    next > prev ? num_list.push(next - prev) : num_list.push(next * 2)
    return num_list;
}

삼항 연산자로 간단하게 처리했다.

 

 

다른 사람의 풀이

function solution(num_list) {
    const [a, b] = [...num_list].reverse();
    return [...num_list, a > b ? (a-b) : a*2];
}

num_list를 reverse에서 마지막 두 원소를 구조 분해 할당으로 변수를 지정해 사용한 점이 인상 깊었다. 그리고 배열에 push 하는 것이 아니라 스프레드 연산자를 이용해서 원소를 추가해 주었다는 점도!

 


구조 분해 할당

만약 배열의 첫 번째 요소를 가져와서 변수에 담고 싶을 때, 어떻게 하면 될까요? 보통 아래와 같은 방법을 먼저 떠올릴 수 있습니다.

const array = [1, 2, 3];
const first = array[0];
console.log(first); // 1

위 방법 말고, 배열 구조 분해 할당을 이용하여 아래와 같이 작성할 수도 있습니다.

const array = [1, 2, 3];
const [first] = array;
console.log(first); // 1

array 배열에 담긴 것을 구조 분해 할당으로 first라는 변수에 담고자 합니다. 단, first 에는 array의 element 중 맨 첫 번째 1 만 담기게 됩니다.

 

출처 https://chanhuiseok.github.io/posts/js-10/

 

 

댓글