-
[Programmers] JavaScript 알고리즘 | Lv.0 마지막 두 원소► JS Algorithm/Programmers 2023. 12. 5. 20:57반응형
🔒 문제 설명
정수 리스트 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
- 마지막 원소인 6이 그전 원소인 1보다 크기 때문에 6 - 1인 5를 추가해 return합니다.
입출력 예 #2
- 마지막 원소인 5가 그전 원소인 7보다 크지 않기 때문에 5의 두 배인 10을 추가해 return합니다.
🔐 solution of mine
reduce()
const solution = (num_list) => { let lastIndex = num_list.length - 1; // 마지막 인덱스번호 let lastNum = num_list[lastIndex]; // 마지막 인덱스 숫자 let frontIndex = num_list.length - 2; // 마지막의 앞 인덱스번호 let frontNum = num_list[frontIndex]; // 마지막의 앞 인덱스 숫자 let minus = lastNum - frontNum; // 마지막 두개 인덱스 값끼리 빼기 let double = lastNum * 2; // 마지막 인덱스 값의 두배 lastNum > frontNum ? num_list.push(minus) : num_list.push(double); // 조건에 따라, 빼기 또는 두배 배열만들기 return console.log(num_list); // output 배열 }; solution([2, 1, 6]); // expected output: [2, 1, 6, 5] solution([5, 2, 1, 7, 5]); // expected output: [5, 2, 1, 7, 5, 10]
🔐 solution of others
reverse()
[... ]
function solution(num_list) { const [a, b] = [...num_list].reverse(); // reverse()를 통하여 배열을 역순으로 바꿈 → 그러하여, a와 b가 배열 맨위의 숫자를 할당받을 수 있음 return console.log([...num_list, a > b ? a - b : a * 2]); // 조건식에 따라 마지막 인덱스에 삽입 } solution([2, 1, 6]); // expected output: [2, 1, 6, 5] solution([5, 2, 1, 7, 5]); // expected output: [5, 2, 1, 7, 5, 10]
◆ check point 1
const [a, b] = [...num_list].reverse(); // 1안 const [c, d] = num_list.reverse(); // 2안
1안(a,b)과 2안(c,d)의 결과값은 같다. 왜냐면, 그냥 num_list배열을 그대로쓰는 1안이나,
[...num_list]형식처럼 배열을 풀었다 다시 넣어주는 2안의 형태라서, 결론적으로 두가지 과정의 결과값은 같다.
하지만 2안의 경우, 원본배열 num_list이 reverse()에 의해 변형된다.
즉, 원본유지를 원하면 1안, 원본이 바껴도되면 2안을 사용하면된다.
◆ check point 2
return console.log([...num_list, a > b ? a - b : a * 2]); // 1안 num_list.push(a > b ? a - b : a * 2); // 2안 return console.log(num_list); // expected output: [2, 1, 6, 5]
1안은 빈배열에 기존배열 num_list를 ...num_list 방식으로 풀어넣고, 조건식에 따라 뒤에 필요한 숫자를 추가하였다.
한줄로 끝나는 간단한 형식이다.
2안은 push()를 사용하여 기존 num_list배열에 필요한 숫자를 추가해줬다.
push() 특성상 return에 직접 넣을수 없기때문에, 코드 한줄이 더 필요한 형태이다.
이 부분이 제일 헷갈렸던 부분인데 그 이유를 아래에 추가적으로 설명했다
◆ push() 메소드 코드예시
const answer = num_list.push(5); // num_list = [2, 1, 6] 인 상태 console.log(num_list.push(5)); // expected output: 4 → push(5)가 추가된, 총 배열길이 console.log(answer); // expected output: 4 → push(5)가 추가된, 총 배열길이 console.log(num_list); // expected output: [2, 1, 6, 5] → push(5)가 추가된, 변형된 num_list의 배열형태
push의 경우 배열의 뒤로 원하는 요소들을 추가할 수 있는 메소드이다.
하지만 push메소드를 그대로 출력할 경우에는, 변형된 num_list배열의 length를 반환한다.
우리가 원하는 배열 그대로를 보고싶으면, 변형된 num_list배열를 그대로 출력하여야한다.
반응형'► JS Algorithm > Programmers' 카테고리의 다른 글
[Programmers] JavaScript 알고리즘 | Lv.0 0 떼기 (1) 2023.12.05 [Programmers] JavaScript 알고리즘 | Lv.0 문자열을 정수로 변환하기 (1) 2023.12.05 [Programmers] JavaScript 알고리즘 | Lv.0 길이에 따른 연산 (0) 2023.12.05 [Programmers] JavaScript 알고리즘 | Lv.0 n 번째 원소까지 (0) 2023.12.04 [Programmers] JavaScript 알고리즘 | Lv.0 n의 배수 (1) 2023.12.04