ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [TIL]Day 26. 간단한 js 내장 객체 : math (feat. code kata)
    IT 지식 2020. 10. 16. 11:15
    728x90

    오늘은 자바스크립트에서 지원하는 내장 객체인 Math와 그 메소드들에 대해 알아보도록 하겠습니다.

     

    1. Math 

     

    더보기

    Math는 수학적인 상수와 함수를 위한 속성과 메서드를 가진 내장 객체입니다. 함수 객체가 아닙니다.

    Math는 Number 자료형만 지원하며 BigInt와는 사용할 수 없습니다(from MDN).

     

    Math는 자바스크립트에서 기본적으로 지원해주는 표준 내장객체입니다. Math 를 활용하여 길게 표현해야 하는 문법들을 보다 간단하게 줄일 수 있다는 장점이 있습니다. 그 활용도는 코딩테스트와 같은 알고리즘 문제 풀이에서도 활용될 수 있지만, 물리법칙을 활용한 알고리즘이 필요한 영역에서도 사용할 수 있습니다. 자바스크립트 응용 어플리케이션을 만들 때 유용하게 활용할 수 있다는 뜻이 되겠네요.

     

    2. Math 내장 메소드

     

    Math 객체 안에는 다양한 메소드 들이 들어 있습니다. 여기서 그 전부를 다루기보다는 그 중에서 특히 많이 쓰일 법한 것들을 추려서 말씀드리도록 하겠습니다.

     

    1) Math.abs(x)

    숫자의 절댓값을 반환합니다.

     

    2)Math.ceil(x)

    인수보다 크거나 같은 수 중에서 가장 작은 정수를 반환합니다.

     

    3) Math.floor(x)

    인수보다 작거나 같은 수 중에서 가장 큰 정수를 반환합니다.

     

    4) Math.max([x[, y[, …]]])

    0개 이상의 인수에서 제일 큰 수를 반환합니다.

     

    5) Math.min([x[, y[, …]]])

    0개 이상의 인수에서 제일 작은 수를 반환합니다.

     

    6) Math.random()

    0과 1 사이의 난수를 반환합니다.

     

    7) Math.random()

    0과 1 사이의 난수를 반환합니다.

     

    8) Math.trunc(x) 

    숫자의 정수 부분을 반환합니다.

     

     

    3. code kata 문제 예시

     

    * 문제
    인자인 height는 숫자로 이루어진 배열입니다.
    그래프로 생각한다면 y축의 값이고, 높이 값을 갖고 있습니다.
    
    아래의 그래프라면 height 배열은 [1, 8, 6, 2, 5, 4, 8, 3, 7] 입니다.
    
    * 가정
    배열의 길이는 2이상입니다.
    //나의 답안
    
    function getMaxArea(height) {
      let maxArea = 0;
      let resultArr = [];
      
      for (i = 0; i < height.length; i++) {
        for (j = i; j < height.length; j++) {
          const heightValue = height[i] > height[j] ?  height[j] : height[i];
          const widthValue = j - i;
          resultArr.push(heightValue * widthValue);
        }
      }
      resultArr.sort((a, b) => b - a);
      
      maxArea = resultArr[0];
      
      return maxArea
    }
    // 예시 답안
    
    function getMaxArea(height) {
        let size = 0;
        
        for (let i = 0; i < height.length; i++) {
            for (let j = i+1; j < height.length; j++) {
                size = Math.max(Math.min(height[i], height[j]) * (j-i), size);
            }
        }
        
        return size;
    }
    

     

     

    저는 문제에서 요구하는 두 값 중 작은 값을 구하기 위해 삼항 연산자를 사용했습니다만, 예시 답안에서는 이를 Math.min이라는 Math의 내장 메소드를 활용하여 손쉽게 구했습니다. 또 여러 값들 중 가장 큰 값을 구하기 위해 저는 배열을 만들고 그 안에서 여러 값들을 정렬하고 큰 값을 구하는 방식으로 접근했지만, 예시 답안에서는 Math.max라는 방식으로 더 간단하게 구하는 모습입니다. 

     

    4. 마무리

     

    몇몇 코딩 테스트에서는 이런 간단한 메소드를 사용하지 않고 return값을 도출하라는 조건이 붙기도 한다고 합니다. 그럴 때에는 이런 알고리즘을 직접 생각하는 것이 더 좋은 방식일 수 있겠으나, 일상에서 코딩하는 상황이라면 보다 편한 방법을 사용하는 것이 훨씬 좋으니까 이런 메소드들이 있다는 것을 알아두는 것도 우리가 다양한 코드를 작성하는데 더 도움이 될 것입니다. 

     

    오늘도 어제보다 좀 더 성장하는 개발자가 되시길 바랄게요!! 

     

    728x90

    댓글

Designed by Tistory.