안녕하세요 미어캣입니다.
오늘은 프로그래머스 기초문제 원소들의 곱과 합 문제를 풀어보도록 하겠습니다.
문제설명 :
정수가 담긴 리스트 num_list가 주어질 때, 모든 원소들의 곱이 모든 원소들의 합의 제곱보다 작으면 1,
크면 0을 return 하는 soulution 함수를 완성하시오.
제한사항 :
2<= num_list의 길이 <= 10
1<= num_list의 원소 <= 9
문제 :
function solution(num_list) {
var answer = 0;
return answer;
}
이번 문제는 리스트의 값들을 구하는 방법, 그 원소들의 합, 곱 을 구하는 방법들을 고민 할 수 있는 문제입니다.
정답 :
function solution(num_list) {
//제한사항을 위한 변수
let len = str.length;
let min = Math.min(...str);
let max = Math.max(...str);
let answer = 0;
let multiply = 1;
let add = 0;
if((len >=2 && len <= 10) && (min >= 1 && max <= 9)) { // 제한사항
for(let a of num_list) { //모든 원소들의 곱
multiply *= a;
add += a; // 모든 원소들의 합
}
// if(mutiply < Math.pow(add, 2))
if(multiply < (add*add))
return 1;
else
return 0;
}
}
처음에는 저도 for문 을 쓰려고했으나 어차피 값들이 열거형식으로 사용될 것 같아서 for of문을 사용하였습니다.
모든 원소들의 곱, 합을 구한 후 이를 비교하는 방식으로 문제를 풀었는데,
시간이 지나고 다시 문제를 보니깐 너무 길어진 것 같기도하고, reduce를 사용하는 방식이
훨씬 JavaScript느낌 같아서 수정해 보았습니다.
const solution = (str) => {
//제한사항을 위한 변수
let len = str.length;
let min = Math.min(...str);
let max = Math.max(...str);
if((len >=2 && len <= 10) && (min >= 1 && max <= 9)) { // 제한사항
let x = str.reduce((a, b) => a *= b); // 모든 원소들의 곱
let pow = Math.pow(str.reduce((a,b)=> a += b), 2) // 모든 원소들의 합의 제곱
if(x < pow)
return 1;
else
return 0;
}
}
기존에 Java베이스 코딩을 했었기에 코드가 굉장히 Java스러워서
최근의 JavaScript에서는 const형식(함수 표현식)이 선호되고있어 사용빈도를 늘려보고있습니다.
Array.reduce :
JavaScript의 reduce 함수는 배열의 각 요소에 대해 주어진 콜백함수를 실행하여 결과를 축소하는 함수입니다.
배열의 각 요소를 순회하며 누적된 값을 계산하거나 배열을 단일 밗으로 변환하는데 유용한 함수
라서 앞으로도 많이 사용하게 될 함수 입니다. 이번에 알게되어서 사용 빈도를 늘려보려고합니다.
제한사항을 설정한 후 reduce와 Math 함수를 활용하여 모든 원소들의 곱, 모든 원소들의 합의 제곱을 구한 뒤
간단하게 비교하였습니다.
비교적 쉬운 문제였지만 풀 수 있는 방식이 다양해서 활용법을 익히는데 도움이 많이 되는 문제였습니다.
감사합니다. 파이팅...!
'Web, View > 코딩테스트 연습' 카테고리의 다른 글
[JavaScript] 카운트 업 - 181920 (0) | 2023.12.11 |
---|---|
[JavaScript] 마지막 두 원소 - 181927 (1) | 2023.12.07 |
[JavaScript] flag에 따라 다른 값 반환하기 - 181933 (2) | 2023.12.06 |
[JavaScript] 홀짝에 따라 다른 값 반환하기 - 181935 (2) | 2023.12.06 |
[JavaScript] 공배수 - 181936 (4) | 2023.12.05 |