[알고리즘] 기초 문제 풀이 - 홀수

홀수

7개의 자연수가 주어질 때, 이들 중 홀수인 자연수들을 모두 골라 그 합을 구하고, 고른 홀수들 중 최소값을 찾는 프로그램을 작성하세요.

예를 들어, 7개의 자연수 12, 77, 38, 41, 53, 92, 85가 주어지면 이들 중 홀수는 77, 41, 53, 85이므로 그 합은 77 + 41 + 53 + 85 = 256
이 되고, 41 < 53 < 77 < 85이므로 홀수들 중 최소값은 41이 된다.


▣ 입력설명
첫 번째 줄에 자연수 7개가 주어진다. 주어지는 자연수는 100보다 작다. 홀수가 한 개 이상
반드시 존재한다.
▣ 출력설명
첫째 줄에 홀수들의 합을 출력하고, 둘째 줄에 홀수들 중 최소값을 출력한다.
▣ 입력예제 1
12 77 38 41 53 92 85
▣ 출력예제 1
256
41


홀수를 판단하는 방법으로 가장 먼저 생각나는 것은, 2로 나눴을 때 나머지가 1인 숫자로 판단하는 것이다. 마땅한 내장 함수는 생각나지 않으니, 일단 이 방법으로 진행해보도록 하겠다.

내 풀이

function solution(arr) {
        let answer = [];
        let odds = [];
        arr.forEach((item) => (item % 2 === 1 ? odds.push(item) : null));
        odds.sort((a, b) => a - b);
        const reducer = (accumulator, curr) => accumulator + curr;
        const sum = odds.reduce(reducer);
        const min = odds[0];
        answer.push(sum);
        answer.push(min);
        return answer;
}

이제 와보니 코드가 복잡해보이고 가독성이 떨어져보인다. 배열에 관한 함수를 최대한 많이 사용하려고 노력하였다.

강사님 풀이

function solution(arr){
  let answer=[];
  let sum=0, min=1000;
  for(let x of arr){
    if(x%2===1){
      sum+=x;
      if(x<min) min=x;
    }
  }
  answer.push(sum);
  answer.push(min);     
  return answer;
}

강사님은 최솟값을 초기화할때 최대한 큰 숫자로 초기화하는 것을 선호한다. 강사님 풀이를 보니 내 코드를 조금 더 깔끔하게 만들 수 있을 것 같았다.

좋은 웹페이지 즐겨찾기