문제 설명
정수가 담긴 리스트 num_list가 주어질 때, 모든 원소들의 곱이 모든 원소들의 합의 제곱보다 작으면 1을 크면 0을 return하도록 solution 함수를 완성해주세요.
✅ 내 코드
function solution(num_list) {
let times = num_list.reduce((acc,cur) => acc*cur)
let sum2 = num_list.reduce((acc,cur) => acc+cur)**2
if(times < sum2) {
return 1
} else {
return 0
}
}
🙋♀️ 내 생각
일단 문제를 읽고, 결과값 두개를 비교하기 이전에
먼저 모든 원소들의 곱과 합의 제곱을 구해야겠다고 생각했다.
그래서 이런 계산에 가장 적절하다고 생각하는 reduce()가 생각났다.
바로 if문안에서 두 값을 비교하는 식을 써도 되지만,
길이가 너무 길어져서 가독성이 떨어지기때문에 가독성을 위해서 먼저 두수를 변수에 담았다.
값들의 곱은 times라는 이름의 변수에,
합의 제곱은 sum2가는 이름의 변수에 담았다.
reduce메서드에 두개의 인자를 넣으면 첫번째 인자에는 accumulate, 말 그래도 내가 원하는 식대로 값이 축적되어 가는 것을 의미한다.
또한 두번째 인자는 currentValue 즉, 현재에 새롭게 들어가는 값을 의미한다.
reduce를 이용하면 배열을 돌면서 내가 원하는 연산을 처리하면서 그 값들의 축적된 값을 구할 수 있다.
그래서 이 연산자를 사용해야겠다고 생각했다.
그 뒤에는 if문을 사용해서 변수에 담은 값들을 비교하여 1, 0 을 출력하도록 하였다.
💻 내가 사용한 메서드
reduce(): 배열의 각 요소에 대해 주어진 리듀서 (reducer) 함수를 실행하고, 하나의 결과값을 반환
Array.reduce()
🔫 reduce의 매개변수
accumulator: 누산기는 콜백의 반환값을 누적. 콜백의 이전 반환값 또는, 콜백의 첫 번째 호출이면서 initialValue를 제공한 경우에는 initialValue의 값이다.
currentValue: 처리할 현재 요소.
이외에도 인텍스와 array, 초기값도 있지만 이 문제에서 사용한 것만 정리해보았다.
💻 학습한것
거듭제곱 만드는 3가지 방법
1. a*a
2. a**2
3. Math.pow(a,2)
reduce는 자주쓰는 메서드여서 검색없이 바로 식을 만들었는데, 자바스크립트에서 거듭제곱 만드는 방법은 조금 헷갈려서 검색을 통해 다시 확인하였다.
이중 나는 2번째 방법을 사용하였다.
💻 다른사람 코드중에 배울 것
function solution(num_list) {
let mul = num_list.reduce((a, c) => {return a*c ;}, 1);
let sum = num_list.reduce((a, c) => {return a+c ;}, 0);
return (mul < sum*sum) ? 1 : 0;
}
나처럼 reduce로 풀었지만 리턴문을 reduce 안에 적은 것이 인상깊었다.
저렇게 reduce 메서드의 콜백함수 내부에서 return을 사용할수있다는 것을 알게되었다.
아직 저렇게 써본적은 없는데 혹시라도 나중에 실무에서 코드를 짜면서 필요할 수도 있겠다는 생각이 들어서 기억해두려고 한다.
'JavaScript > 알고리즘' 카테고리의 다른 글
프로그래머스 두 수의 합 JS ( BigInt(), 부동소수점 공부 ) (1) | 2023.06.03 |
---|---|
프로그래머스 배열만들기1 JS ( Math.floor(), for문, push() ) (0) | 2023.05.31 |
프로그래머스 수 조작하기1 JS ( for문, if문 / reduce() ) (1) | 2023.05.31 |
프로그래머스 카운트다운 JS ( for문,push() / Array(),fill(),map() ) (0) | 2023.05.30 |
프로그래머스 문자열의 앞의 n글자 JS ( slice() ) (0) | 2023.05.30 |