ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CodeKata] 프로그래머스 : 3.13(토), 피보나치 수 & 행렬의 곱셈
    Algorithm 2021. 3. 13. 13:37
    반응형

    🥋 Ooooth!! (Level 2)

     

     

    🧮 풀이

    function solution(n) {
      let pre = 0;
      let cur = 1;
      let last = 0;
      for (let i = 2 ; i <= n ; i++) {
        last = (pre + cur) % 1234567;
        pre = cur;
        cur = last;
      }
      return last;
    }
    1. 피보나치 수는 i번째 수가 i-1번째와 i-2번째의 합인 수이다. pre(0번째) = 0, cur(1번째) = 1 를 먼저 초기 설정해준다.
    2. for문을 순회하며 last에 피보나치 수를 누적한다. n번째 피보나치 수를 구해야하며, 0번째부터 시작했으므로 종료조건은 n까지이다.
    3. 본래는 (pre + cur) 를 누적해야하나, 이번 문제는 1234567로 나눈 나머지를 누적한다.
    4. 그 다음에, i-1, i-2번째를 관리하기 위해 pre와 cur를 각각 cur과 last로 최신화해주면 된다.

    🥋 Ooooth!! (Level 2)

     

    🧮 풀이

    function solution(arr1, arr2) {
      const ansX = arr1.length;
      const ansY = arr2[0].length;
      const ansLen = arr2.length;
      let answer = Array.from({ length: ansX }, (x => Array.from({ length: ansY }, y => 0)))
    
      for (let x = 0 ; x < ansX ; x++) {
        for (let y = 0 ; y < ansY ; y++) {
          for (let l = 0 ; l < ansLen ; l++) {
            answer[x][y] += arr1[x][l] * arr2[l][y]
          }
        }
      }
      
      return answer;
    }
    1. 중학교땐가... 배웠던 행렬의 곱셈의 기억을 더듬어보았다 ㅎㅎㅎㅎ 🤔
    2. (4x2) * (2x4) 행렬의 곱셈을 예로 들면, 앞의 열과 뒤의 행의 길이가 같아야하며(2), 결과값은 앞의 행과 뒤의 열이 된다.(4x4)
    3. 즉, ansX, ansY는 결과값의 행과 열 길이이며, ansLen은 같은 값이자 곱셈을 반복하게되는 횟수이다.
    4. 이를 통해, answer 정답 이차원 배열의 사이즈를 미리 ansX * ansY 로 설정할 수 있다. (값을 더해주기 위해 0으로 초기세팅)
    5. 먼저, ansX, ansY를 순회하며 answer 배열의 각 인자에 위치한다.
    6. 현재 위치에서 ansLen만큼 더해주는데, arr1에선 행 인덱스를, arr2에선 열 인덱스를 고정하고 l만큼 순회한다.

     

    🖇 리뷰

    function solution(arr1, arr2) {
      return arr1.map((row) => arr2[0].map((x,y) => row.reduce((a,b,c) => a + b * arr2[c][y], 0)))
    }

    * 출처 : 프로그래머스 다른 사람의 풀이

     

    참 세상엔 대단하신 분들이 많다...

     

    arr1을 map하면 행 길이만큼, arr2[0]를 map하여 열 길이만큼 순회를 했다.

    row는 arr1의 각 행이 될 것이며, 이를 해당하는 arr2과의 곱의 누적값으로 reduce 처리한 것이다.

    reduce의 인자들에서 a는 누적값, b는 현재값(arr1)이며 c가 인덱스이므로 arr2의 행 인덱스로 이를 적용한 모습이다.

     

    반응형
Designed by Tistory.