코딩테스트/프로그래머스 기초 트레이닝

[Javascript] 마지막 두 원소 - at() (, reverse())

dev_swH 2023. 5. 27. 16:16

문제 설명

정수 리스트 num_list가 주어질 때,

마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을

마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을 추가하여 return하도록 solution 함수를 완성해주세요.

 

나의 풀이 :

function solution (num_list) {
return num_list[num_list.length - 1] > num_list[num_list.length - 2]
? num_list.concat(num_list[num_list.length - 1] - num_list[num_list.length - 2])
: num_list.concat(num_list[num_list.length - 1] * 2);
}

 

틀린 건 아닌데 작성하면서도 가독성이 참 나쁘다고 생각했다.

그런 뒤 다른 사람들의 풀이를 봤는데, 굉장히 감탄한 코드가 2개 있었다.

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

(2)
const solution = n => [...n, n.at(-1) > n.at(-2) ? n.at(-1) - n.at(-2) : n.at(-1) * 2];

 

2가지 다 전개 연산자를 사용한 풀이다.

나는 아직까지 전개 연산자를 내 것처럼 활용하지 못하는 건 둘째 치고...부끄럽지만 아예 전개 연산자를 방법론으로 떠올리지도 못 하는 단계여서,

프로그래머스 기초 트레이닝을 하는 내내 다른 사람의 풀이를 보면서 많이 배우게 된다.

코딩 테스트를 위한 연습으로도 좋지만 자바스크립트와 ES6+을 다루는 방법을 배우고 시야를 넓히는 데 도움이 많이 되는 것 같다.

 

(1) at()

at() 메소드는 원하는 인덱스의 요소를 반환한다.

사용 방식 :
at(찾으려는 인덱스)

 

당연하지만 인덱스니까 매개변수에는 정수 값을 넣어야 한다.

음수를 넣을 경우 배열의 뒤에서부터 인덱스를 센다.

배열의 맨 마지막 요소를 가져오고 싶을 때

array[array.length - 1]을 사용하는 것보다 array.at(-1)을 사용하면 훨씬 더 간편하다.

 

참고로 배열에 없는 인덱스를 매개변수로 넣을 경우 undefined를 반환한다.

 

(2) reverse()

reverse() 메소드는 단어 뜻 그대로 배열의 순서를 뒤집어준다.

reverse()는 매개변수를 필요로 하지 않고 그냥 이대로 사용한다.