정수가 담긴 리스트
num_list
가 주어질 때,
모든 원소들의 곱
이모든 원소들의 합의 제곱
보다 작으면1
을 크면0
을 return하도록 solution 함수를 완성해주세요.
모든 원소들의 곱
값과모든 원소들의 합의 제곱
의 값을 각각의 변수에 할당한다.- 둘을 비교하여 return한다.
function solution(num_list) {
let multiplicationValue = num_list.reduce((acc, cur) => {
return acc * cur;
}, 1);
let squareValue =
num_list.reduce((acc, cur) => {
return acc + cur;
}, 0) ** 2;
return multiplicationValue < squareValue ? 1 : 0;
}
reduce
메서드 너무 편리한걸?
function solution(num_list) {
let accMul = 1
let accSum = 0
for (const num of num_list) {
accMul *= num
accSum += num
}
return accMul < accSum ** 2 ? 1 : 0
}
기존 내 코드는 아래와 같다.
function solution(num_list) {
let multiplicationValue = num_list.reduce((acc, cur) => {
return acc * cur;
}, 1);
let squareValue =
num_list.reduce((acc, cur) => {
return acc + cur;
}, 1) ** 2;
return multiplicationValue < squareValue ? 1 : 0;
}
정답 코드와 무엇이 다른지 잘 봐야 알 수 있다.
합의 제곱 코드에서 초기값 설정하는 부분이 다르다.
// 정답 코드
let squareValue =
num_list.reduce((acc, cur) => {
return acc + cur;
}, 0) ** 2;
// 틀린 코드
let squareValue =
num_list.reduce((acc, cur) => {
return acc + cur;
}, 1) ** 2;
자꾸 case 2만 틀리는 것이 아닌가?
아니 대체 뭐지.. 하고 생각하던 찰나에, 간과하고 있던 부분을 지적해주신 한 분이 있었다.
reduce()
메서드 초기값을 1로 설정했다면, 곱셈연산에서와 덧셈에서 어떤 차이가 있을지 생각해봐야 한다.
그렇다.. 곱셈에서는 초기값을 1로 설정해도 큰 차이가 없지만, 덧셈연산이라면 말이 다르다.
덧셈연산에서 초기값을 1로 설정하고, 그 값을 제곱연산 해버린다면 내가 예상하지 못한 값이 충분히 나올 수 있다!
오늘도 이렇게 하나 배웠다.