알고리즘 풀이

김재우·2023년 9월 12일
0
post-thumbnail

이 글은 인프런 js 알고리즘 강의를 듣고 배운 내용을 정리하는 글입니다.
문제의 내용은 저작권 때문에 올릴 수 없는 점 양해 바랍니다.

  1. 1부터 N까지의 합을 구하는 알고리즘 입니다.
function solution(n) {
  let answer = 0;
  for (let i = 1; i <= n; i++) {
    answer = answer + i;
  }
  return answer;
}
console.log(solution(6));

풀이: 1부터 Params 까지 계속해서 반복으로 도는 for문을 만든뒤에 for문이 한번 돌때마다 i 의 값을 answer에 더함으로써 합을 구하는 알고리즘 입니다.
알고리즘을 설명하자면 for 문에 0부터 시작할 필요가 없기 때문에
i 의 변수의 값을 1로 지정하고 param으로 받아오는 6과 같아질때까지 반복해서 돌게 설정한 후 i 는 계속해서 1씩 증가하도록 설정되어있습니다.
그렇기 때문에 1부터 n까지 숫자를 모두 합하여 마지막에 합한 값을 리턴 할 수 있는 알고리즘입니다.

2.최솟값을 구하는 알고리즘 입니다.

function solution(arr) {
  let answer,
    min = Number.MAX_SAFE_INTEGER;
  for (let i = 0; i <= arr.length; i++) {
    if (arr[i] < min) min = arr[i];
  }

  return min;
}

2.Math 문법을 활용하여 최솟값 찾기

function solution(arr)
{
  let answer=Math.min(...arr)
  
  return answer;
}
let arr = [5, 3, 7, 11, 2, 15, 17];
console.log(solution(arr));
  1. Math.min.apply(null,arr) 을 이용한 풀이

    function solution(arr) {
    let answer = Math.min.apply(null, arr);
    
    return answer;
    }
    let arr = [5, 3, 7, 11, 2, 15, 17];
    console.log(solution(arr));

풀이: 먼저 최솟값을 나타내는 변수인 min 을 가장 안전한 숫자로 치환시켜준다음에 for 문을 돌려 배열의 length만큼 돌면서 배열 하나의 요소들과 비교를 하여 가장 낮은 숫자를 찾는 알고리즘 입니다.
여기서 배운점은 min이라는 변수를 처음 Number.MAX_SAFE_INTEGER 이라는 문법으로 가장 큰 숫자로 바꿔준다는게 신기했습니다.
이 외에도 arr의 spread 문법을 이용하여 Math.min을 이용하여
answer=Math.min(...arr) 하여 최솟값을 구할 수 있습니다.

  1. 홀수 찾는 알고리즘 풀이입니다.
    reduce를 이용한 나의 풀이
function solution(arr) {
  let answer = [],
    single = [],
    min;
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] % 2 !== 0) single.push(arr[i]);
  }
  let sum = single.reduce((a, c) => a + c, 0);
  min = Math.min(...single);
  answer.push(sum);
  answer.push(min);
  return answer;
}
let arr = [12, 77, 38, 41, 53, 92, 85];
console.log(solution(arr));

쌤의 풀이

   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;
            }
            
            arr=[12, 77, 38, 41, 53, 92, 85];
            console.log(solution(arr));

풀이: 홀수를 찾아서 홀수인 숫자를 다 더한값을 출력하고 홀수중에 가장 작은 숫자를 찾아서 출력하는 알고리즘입니다.
먼저 저는 answer = [] 배열로 변수를 할당한 이유는 출력을 두개값 나오게끔 하기 위해서 배열로 할당 하였습니다.
그리고 reduce 함수를 사용하고 싶어 홀수를 담는 배열을 하나 더 지정했습니다. 그리고 최솟값을 담는 min 변수도 선언하였습니다.
for문을 돌리고 배열의 인덱스 길이 만큼 돌게 한 뒤 홀수를 하나하나 찾아서 single 이라는 배열에 push 했습니다. 그리고 reduce 함수를 이용해 처음부터 끝까지 다 더했습니다. 최솟값은 Math 함수를 이용하여 찾고 그걸 answer에 삽입시켜 답을 출력시켰습니다.
저와 쌤의 풀이 비교도 해보겠습니다.
쌤과 저의 풀이에서 차이점은 쌤은 for of 문을 활용하여 코드의 간결화와 for문 안에서 합과 비교까지 다 했다는점 그리고 무엇보다 쓸데없는 변수를 선언하지 않았다는 점인거 같습니다. 코드를 짤때 좀 더 생각하고 짜야겠습니다.

profile
프론트엔드 꾸준개발자입니다.

0개의 댓글