알고리즘 (JS) / / 2023. 11. 22. 17:31

The Other Algorithms

Cartesian product

두 개의 set에서 각 요소의 곱을 나타내는 방법이다.

예를 들어, A = [1, 2] / B = [3, 4] 가 있다면 AxB = [[1, 3], [1, 4], [2, 3], [2, 4]]  이런 식으로 나타내게 된다.

function cartesian(arr1, arr2) {
  const result = [];

  for (let i = 0; i < arr1.length; i++) {
    for (let j = 0; j < arr2.length; j++) {
      result.push([arr1[i], arr2[j]])
    }
  }

  return result
}

 

이렇게 되면 Big O는 O(mn)가 된다. arr1과 arr2의 길이가 다르기 때문에 그걸 곱한 게 새로운 배열의 길이가 되고

O(mn)은 작은 것은 보지 않기 때문에 결과적으로는 O(n)이 된다.

 

Climbing staircase

문제: 주어진 계단 수(n)에 따라서 올라갈 수 있는 방법이 몇 개가 있는지 리턴해라. 계단은 1개 혹은 2개씩 올라갈 수 있다.
예를 들어 n = 3 -> (1, 1, 1) (1, 2) (2, 1) ===> 3

 

계단을 한 개 올라가는 경우: (1), 리턴값: 1

계단을 두 개 올라가는 경우: (1, 1) (2), 리턴값: 2

계단을 세 개 올라가는 경우: (1, 1, 1) (1, 2) (2, 1), 리턴값: 3

계단을 네 개 올라가는 경우: (1, 1, 1, 1) (2, 1, 1) (1, 2, 1) (1, 1, 2) (2, 2), 리턴값: 5

 

이런 식으로 피보나치와 같이 [개수 - 1] 과 [개수 - 2]의 합과 같다. 

function climbing(n) {
  const noOfWays = [1, 2]

  for (let i = 2; i <= n; i++) {
    noOfWays[i] = noOfWays[i-1] + noOfWays[i-2]
  }

  return noOfWays[n-1]
}

 

Big O -> O(n)

 

 

'알고리즘 (JS)' 카테고리의 다른 글

[데이터구조] Stack / Queue  (1) 2023.12.01
[데이터구조] 배열 / 객체 / Set / Map  (2) 2023.12.01
Sorting Algorithms  (1) 2023.11.22
Search Algorithms  (1) 2023.11.21
Math Algorithms  (1) 2023.11.21
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유