[JavaScript] Math.pow / Math.sqrt / Number.isInteger / Array.sort

slight-snow·2023년 4월 5일
0

JavaScript

목록 보기
1/6
post-thumbnail

오늘자 알고리즘에서 사용된 Math 함수와 isInteger 메서드,
sort 메서드에 대해 알아보자.


Math.pow(x, y)

Math.pow(x, y)함수는 숫자 x에 대한 y제곱 값을 반환한다.
Math.pow함수를 이용한 결과는 다음과 같다.

Math.pow(7, 3); //343
Math.pow(4, 0.5); //2
Math.pow(7, -2); //0.02040816326530612 === 1/49

Math.pow(-2, 3); //-8
Math.pow(-4, 0.5); //NaN
Math.pow(-4, -2); //0.0625

Math.pow(x, y)에서 x가 음수일 때, y에 소수를 대입하면 NaN이 나온다.


Math.sqrt(x)

Math.sqrt(x)함수는 숫자 x에 대한 제곱근 값을 반환한다.
Math.sqrt함수를 이용한 결과는 다음과 같다.

Math.sqrt(9); // 3
Math.sqrt(2); // 1.414213562373095

Math.sqrt(1);  // 1
Math.sqrt(0);  // 0
Math.sqrt(-1); // NaN

Number.isInteger(x)

Number.isInteger(x)메서드는 숫자 x가 정수인지 아닌지를 판별해준다.
Number.isInteger메서드를 이용한 결과는 다음과 같다.

Number.isInteger(0);         // true
Number.isInteger(1);         // true
Number.isInteger(-100000);   // true
Number.isInteger(99999999999999999999999); // true

Number.isInteger(0.1);       // false
Number.isInteger(Math.PI);   // false

Number.isInteger(NaN);       // false
Number.isInteger(Infinity);  // false
Number.isInteger(-Infinity); // false
Number.isInteger('10');      // false
Number.isInteger(true);      // false
Number.isInteger(false);     // false
Number.isInteger([1]);       // false

Array.sort()

Array.sort()메서드는 Array배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환한다.
Array.sort()메서드를 사용해본 결과, 몇 가지 주의 사항이 있다.

1. 기본적으로 정렬은 첫 번째 자리의 단어 혹은 숫자 기준 오름차순으로 이뤄진다.

let array1 = [3, 5, 2, 1];
array1.sort();
console.log(array1); //[1, 2, 3, 5]

let array2 = [1, 100, 3, 2];
array2.sort();
console.log(array2); //[1, 100, 2, 3]

let array3 = ['A', 'B', 'ABC', 'C'];
array3.sort();
console.log(array3); //['A', 'ABC', 'B', 'C']

2. Array.sort() 메서드는 한 번이라도 실행되면 해당 배열을 정렬한다.

이게 무슨 말이냐면, 새로운 변수를 선언하고 해당 변수에 기존의 배열을 정렬한 형태를 할당하려고 메서드를 사용하면, 원본 배열도 정렬된다는 것이다.
다음의 코드가 이해를 도울 수 있지 않을까 생각한다.

let array1 = [3, 5, 2, 1];

//새로운 변수 array2 에 정렬된 array1 를 할당하고자 한다.
let array2 = array1.sort();

//변수에 할당할 때 sort 메서드를 사용하여 기존 배열에 적용된 것을 확인할 수 있다.
console.log(array2); //[1, 2, 3, 5]
console.log(array1); //[1, 2, 3, 5]

그렇기에 위의 코드에서 array1[3, 5, 2, 1] 그대로 두고,
array2[1, 2, 3, 5]를 할당하고 싶다면
array1을 우선 그대로 array2에 할당하고, array2에서 정렬을 시도해야 한다.

3. 괄호 안에 함수를 작성하면 정렬 기준을 설정할 수 있다.

첫 번째 주의 사항에서 배열이 첫 번째 자리를 기준으로 정렬된다는 것을 확인했다.
하지만 [1, 100, 2, 3]배열을 [1, 2, 3, 100]과 같이 수의 크기로 정렬하고 싶다면 Array.sort()메서드의 괄호 안에 함수를 작성해주면 된다.

let array1 = [1, 100, 2, 3];

array1.sort(function(a, b) {
  return a-b;
});
//array1.sort((a, b) => a-b);

console.log(array1); //[1, 2, 3, 100]

오름차순으로 정렬하고 싶다면 Array.sort((a, b) => a-b);를,
내림차순으로 정렬하고 싶다면 Array.sort((a, b) => b-a);를 사용하면 된다.

Array.sort()의 괄호안에 왜 저렇게 넣으면 오름차순이, 왜 저렇게 넣으면 내림차순이 나오는지 자세하게 이해하고 싶다면 이 블로그 내용을 참조하도록 하자.


간단하게 얘기하자면, Array.sort(function => return);에서
return >= 0이면 배열은 그대로 유지되며, return < 0일 경우 배열은 재정렬된다.

위의 예시를 바탕으로 array1[1, 100, 2, 3]의 배열을 값으로 지닌다.
그리고 array1.sort((a, b) => a-b);메서드의 작동 순서는 다음과 같다.
//Array.sort(next, prev) => next-prev);

가장 먼저 a에는 다음 값, 즉 100이 대입되고, b에는 현재 값 1이 대입된다.
그러면 a-b의 결과는 99으로 양수다. 그렇기 때문에 1100은 그대로 자리를 유지한다.
//[1, 100, 2, 3]

그 다음으로, a에는 다음 값인 2가 대입되고, b에는 현재 값인 100이 대입될 것이다.
그러면 a-b의 결과는 -98으로 음수다. 그렇기 때문에 1002는 자리가 바뀌게 된다.
//[1, 2, 100, 3]

이러한 순서로 계속해서 다음 칸으로 넘어가며 값들이 오름차순으로 정렬되는 것이다.
위 개념을 바탕으로 array1.sort((a, b) => b-a);가 왜 내림차순으로 정렬되는지도 이해했을 것이라 생각한다.



오랜만에 함수들과 메서드들을 쓰니 은근히 헷갈리는 개념들이 많다.
역시 개발은 끊임없이 공부하며 사용해봐야 하는 것 같다.

앞으로도 알고리즘들을 풀어가며 새롭게 알게 된 함수들이나 메서드들을 정리해보자!

profile
주니어 개발자의 기억을 위한 기록 :)

0개의 댓글