코딩테스트

[프로그래머스] 마지막 두 원소

john-lennon 2026. 4. 17. 13:40

문제 설명

정수 리스트 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]

 


 

목적: num_list가 있는데
마지막 원소 > 그전 원소 -> 마지막 원소 - 그전 원소 = 값 추가
마지막 원소 < 그전 원소 -> 마지막 원소 *  2 = 값 추가

 

function solution(num_list) {
    
    // 1. 마지막 원소 추출
    last_number = num_list[num_list.length - 1];
    
    // 2. 그전 원소 추출
    second_number = num_list[num_list.length - 2];
    
    if (last_number > second_number) {
        num_list.push(last_number - second_number)
    } else {
        num_list.push(last_number * 2)
    };
    
    
    return num_list;
}

 

나의 방식

1. 마지막 원소 추출
2. 그전 원소 추출
3. if 마지막 원소 > 그전 원소 -> 마지막 원소 - 그전 원소 해라
4. 그 값을 num_list 배열 마지막에 추가
5. else 마지막 원소 < 그전 원소 -> 마지막 원소 * 2 해라
6. 그 값을 num_list 배열 마지막에 추가

 

마지막 원소 추출...
num_list.length (배열 길이) 
ex) [1, 2, 3, 4, 5]
→ 0  1  2  3  4 마지막 인덱스는 배열 길이 5 - 1 = 4
num_list.length - 1 

 


 

case 1 다른 사람의 코드

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

 

내 코드와 차이점

스프레드 문법을 사용해 삼항연 연산자를 활용하여, 배열 처리와 조건 분기를 한 줄로 간결하게 표현했다.

 

 

case 2 다른 사람의 코드

function solution(num_list) {
    const [sec, last] = num_list.slice(-2);
    last > sec ? num_list.push(last - sec) : num_list.push(last * 2);
    return num_list;
}

 

내 코드와 차이점

배열 뒤에서 2개를 slice로 가져오고, 구조분해로 변수에 담은 뒤, 삼항연산자로 조건 처리한 코드

 


 

느낀점

if문으로 조건을 나누는 방식도 좋지만, 배열의 값을 간단히 추출한 뒤 삼항 연산자를 활용하면 더 간결하게 표현할 수 있다는 것을 알게 되었다.