JavaScript/알고리즘

프로그래머스 마지막 두원소 JS ( if문 / reverse(), const )

hihiha2 2023. 5. 29. 03:58
반응형

문제설명

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

 

 

 

✅ 내 코드

function solution(num_list) {
    let last =num_list[num_list.length-1] 
    let last2 = num_list[num_list.length-2]
    if(last > last2) {
       num_list.push(last-last2)
    } else {
        num_list.push(last*2)
    }
  return num_list
}

 

 

🙋‍♀️ 내 생각

배열의 인덱스를 이용해서 문제를 풀어야겠다고 생각했다. 

배열은 0부터 시작하므로 마지막 인덱스는 arr.length-1이고 마지막에서 두번째는 arr.length-2이다.

일일이 적으면 코드가독성이 떨어지므로 변수에 담아서 if문안에 넣어주었다.

push()메서드를 사용해서 조건에 따라서 배열에 넣어주는 코드를 짜고,

마지막에 return을 했다.

 

간단한 문제인거같은데 풀면서 문제가 발생했던 지점이 있었다.

 

문제가 발생했던 이유는 바로 push()때문이었다.

push()메서드를 평소에 이미 많이 사용했다고 생각했지만 내가 이 메서드에 대한 이해가 부족했다는 것을 이 문제를 풀면서 알수있었다.

 

 

❌ 잘못된 코드 ❌

function solution(num_list) {
    let last =num_list[num_list.length-1] 
    let last2 = num_list[num_list.length-2]
    if(last > last2) {
       return num_list.push(last-last2)
    } else {
       return num_list.push(last*2)
    }
}

이렇게 push자체를 바로 return해버리면 배열의 길이를 반환한다!

 

그래서 내가 원하는 값인 배열의 값들이 출력되는 것이 아니라, 4와 같이 배열의 길이가 결과값으로 나온다.

 

 

💻 학습한것

Push(): 배열의 끝에 하나 이상의 요소를 추가하고, 배열의 새로운 길이를 반환

Array.push()

 

 

🔫 주의할점 🔫

배열의 값들을 원한다면 push를 해준 이후에 따로 그 배열을 리턴해주어야한다.

if(last > last2) {
       num_list.push(last-last2)
    } else {
        num_list.push(last*2)
    }
  
  return num_list

이런식으로 push를 미리 한뒤에, num_list를 따로 return해주어야한다.

 

 

만약 배열의 길이를 원한다면 push를 하면서 바로 리턴을 해주면 된다

if(last > last2) {
       return num_list.push(last-last2)
    }

평소에 crud를 만들면서 push()로 create하는 코드도 만들었고

또 리턴도 배열값들이 출력되도록 잘해주어서 결과값을 잘 나왔지만

내가 이 메서드에 대한 정확한 이해가 부족했구나라는 생각이 들었다.

 

todo같은 기능을 만들면서 사용을 했기때문에 잘알고 있다고 생각했는데 아니었던것같다. 

이번에 이 문제를 풀면서 정확하게 이해를 하게 되어서 앞으로 실질적으로 만드는 코드에서도 더 정확한 코드를 만들수있을 것 같다.

 

 

💻  다른사람 코드중에 배울 것

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

나는 배열의 인덱스를 사용했지만 reverse를 이용해서 훨씬 간단하게 푼 코드가 있어서 공부하였다.

일단 ...으로 배열의 요소들을 복사해서 새로운 배열을 생성하고, reverse()메서드를 이용해서 역순으로 정렬한다.

그러고나서 const를 이용해서 배열의 첫번째와 두번째 요소만을 a,b로 추출하였다.

 

...로 다시한번 배열을 복사하고, 삼항연산자를 이용하여 a,b 두값을 비교한뒤 a-b, a*2를 해준다.

그리고 그 값을 리턴한다.

 

...나 reverse()는 생각할수있을것같은데 const [a,b]를 통해서 첫번째와 두번째 요소만을 추출할 수있다는 걸 몰랐다.

이것도 알아두면 프로젝트를 만들때 실무적인 코드에서도 유용하게 사용할 수 있을것같아서 기억해두어야겠다.

 

반응형