본문 바로가기
Algorithm/JavaScript

[basics] 홀수 합과 최솟값

by _sweep 2021. 12. 5.

자바스크립트 알고리즘 문제풀이 강의를 듣고 정리한 내용입니다.

 

 

 

 

📋 문제

7개의 자연수가 주어질 때, 이들 중 홀수인 자연수를 모두 골라 총합을 구하고 고른 홀수 중 최솟값을 찾아 합과 최솟값을 출력한다.

 

 

👉 입력

첫번째 줄에 100보다 작은 자연수 7개가 입력된다. 7개의 수 중 홀수는 하나 이상 존재한다.

 

 

👈 출력

첫번째 줄에 홀수들의 총합을 출력하고 두번째 줄에 홀수들 중 최솟값을 출력한다.

 

 

💡 사용된 개념

filter, reduce

filter와 reduce에 대해서는 아래 링크에서 따로 포스팅해두었다.

 

https://cansweep.tistory.com/179?category=995363

 

[ES6+] map, filter, reduce

함수형 프로그래밍과 JavaScript ES6+ 강의를 듣고 정리한 내용입니다. *** 함수형 프로그래밍에서는 함수가 인자와 리턴 값을 통해 소통하는 방식을 권장한다. map const map = (f, iter) => { let res = []; for..

cansweep.tistory.com

 

 

📝 풀이

 

<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

댓글