자바스크립트 알고리즘 문제풀이 강의를 듣고 정리한 내용입니다.
📋 문제
7개의 자연수가 주어질 때, 이들 중 홀수인 자연수를 모두 골라 총합을 구하고 고른 홀수 중 최솟값을 찾아 합과 최솟값을 출력한다.
👉 입력
첫번째 줄에 100보다 작은 자연수 7개가 입력된다. 7개의 수 중 홀수는 하나 이상 존재한다.
👈 출력
첫번째 줄에 홀수들의 총합을 출력하고 두번째 줄에 홀수들 중 최솟값을 출력한다.
💡 사용된 개념
filter, reduce
filter와 reduce에 대해서는 아래 링크에서 따로 포스팅해두었다.
https://cansweep.tistory.com/179?category=995363
📝 풀이
<script>
function solution(arr) {
let answer = [];
let sum = 0;
let min = Number.MAX_SAFE_INTEGER;
for (const num of arr) {
if (num % 2) {
sum += num;
min = min > num ? num : min;
}
}
answer.push(sum, min)
return answer;
}
arr = [12, 77, 38, 41, 53, 92, 85];
console.log(solution(arr)[0]);
console.log(solution(arr)[1]);
</script>
입력받은 배열을 순회하며 홀수인 것들만 골라 총합과 최솟값을 구한다.
홀수는 2로 나누었을 때 나머지가 1이 된다.
원래는 if(num % 2 === 1)이 좀 더 정석이지만 어차피 입력받은 수를 2로 나누었을 때 나머지는 0 또는 1이 되기때문에
- if(0) // 거짓
- if(1) // 참
if(num % 2)만 해도 홀수와 짝수를 판별할 수 있다.
다른 방법으로는 filter와 reduce를 이용해 sum과 min을 각각 구하는 방법이 있다.
<script>
function solution(arr) {
let answer = [], sum, min;
sum = arr.filter((n) => n % 2).reduce((a, b) => a + b);
min = arr.filter((n) => n % 2).reduce((a, b) => a > b ? b : a);
answer.push(sum, min);
return answer;
}
arr = [12, 77, 38, 41, 53, 92, 85];
console.log(solution(arr)[0]);
console.log(solution(arr)[1]);
</script>
먼저 arr 배열에서 filter를 사용해 홀수인 것들을 골라낸다.
sum에서는 reduce를 이용해 값을 축적해 나가면서 합을 구한다.
min에서는 reduce를 이용해 값을 축적해 나가면서 값을 비교해 최솟값을 저장한다.
'Algorithm > JavaScript' 카테고리의 다른 글
[basics] 일곱 난쟁이 (0) | 2021.12.05 |
---|---|
[basics] 10부제 (0) | 2021.12.05 |
[basics] 최솟값 구하기 (0) | 2021.12.05 |
[basics] 1부터 N까지의 합 (0) | 2021.12.05 |
[basics] 연필 개수 (0) | 2021.12.05 |
댓글