Javascript/JS자료구조,알고리즘

[JS] 기본 알고리즘 (조건 판단)

oneH 2024. 7. 19. 15:12

 

 

알고리즘이 무엇인가?

  해당 글은 간단한 프로그램으로 알고리즘의 정의와 이해를 위한 학습이다.

 

 


 

  알고리즘 정의에 앞서 일단 간단한 프로그램하나로 알고리즘을 정의하고 이해해 보자.

 

 

세 값의 최댓값을 구하는 알고리즘

function maxNum(num1, num2, num3) {
    let max = num1;
    if (max < num2) max = num2;
    if (max < num3) max = num3;
    return max;
}

console.log(maxNum(5, 30, 2));  //30

  

  해당 maxNum 함수의 기능은 다음과 같다.

  • max 변수에 매개변수 num1을 대입한다.
  • 조건문을 통해 매개변수가 대입된 max 변수가 만약 매개변수 num2, num3보다 작을 시 max값을 바꾼다.

  해당 프로그램은 순차적 구조이다. 단순히 if문을 통해 순차적으로 프로그램이 실행된다.

 

 

 

  매개변수가 무엇일까?

메서드를 정의할 때 메서드에 전달되는 값을 저장하기 위해 변수를 선언한다
() 안에 변수를 정의함..
이때 정의한 변수를 매개변수라 고한다. 
간단히 말해 괄호() 안에 있는 변수들이 매개변수(parameters)이다.

 

  전달인수가 무엇일까?

어떠한 함수에 매개변수로 값을 전달해주고 싶을 때 함수를 호출하면서 우리는 괄호 안에 값을 넣는 경우가 많다.
이때, 함수를 호출하며 괄호 안에 값을 넣어 전달하는 그 값을 전달인자(arguments)라고 한다.
즉, 메서드(함수)가 호출될 때 전달하는 값을 인수라고 부른다.

 

 

 

 

최솟값을 구하는 알고리즘

function minNum(num1, num2, num3) {
    let min = num1;
    if (min > num2) min = num2;
    if (min > num3) min = num3;
    return min;
}
console.log(minNum(5, 30, 2));  //2

 

 

 

 

  이처럼 알고리즘은 일련의 단계적 절차이자, 어떠한 문제를 해결하기 위한 동작의 모임이다. 


 

 

 

3개의 값 중 중앙값을 구하는 알고리즘

function medNum(num1, num2, num3) {
    if (num1 >= num2) {
        if (num2 >= num3) {
            return num2;
        } else if (num1 <= num3) {
            return num1;
        } else {
            return num3;
        }
    } else if (num1 > num3) {
        return num1;
    } else if (num2 < num3) {
        return num2;
    } else {
        return num3;
    }
}
console.log(medNum(4, 8, 2));

 

  중앙값을 구하는 알고리즘은 최솟값과 최댓값 구하는 알고리즘보다 절차가 복잡하다. 그래서 더 다양하게 알고리즘을 구현할 수 있다.

 

  중앙값 알고리즘을 통해 알고리즘을 효율에 대해서도 살짝 언급해 보겠다.

 

 

function medNum2(a, b, c) {
    if ((a >= b && a <= c) || (b >= a && a >= c)) {
        return a;
    } else if ((a < b && b < c) || (a > b && b > c)) {
        return b;
    } else {
        return c;
    }
}

 

  이 코드가 더 간략해 보이고 깔끔하다. 그래서 더 좋은 효율을 가진 함수일까?

아니다. 실직적으로 같은 조건판단을 또 수행하므로 코드가 더 비효율적이다.

 

  이처럼 코드가 간략하고 가독성이 좋아도 시간복잡도가 안 좋고 효율적이지 못해 지는 경우도 많다.

 

  나중에 시간복잡도에 대해 자세히 정리해 보겠다.

 

 

 

 


 

대표사진 출처

https://www.flaticon.com/kr/free-icon/js_5968292