[프로그래머스] 09/15 문제 풀이

SeHoony·2022년 9월 16일
0

코테준비

목록 보기
26/27
post-thumbnail

1. 전체 푼 문제

  • lv2 : 행렬의 곱셈(답 확인)
  • lv2 : H-index(8분)
  • lv2 : 괄호 회전하기(9분)
  • lv3 : 이중우선순위큐(12분)

2. 명심할 것

2-1. 배열에서 최댓값, 최솟값 구하기

Math.max()의 매개변수는 원소 하나씩 넣을 수 있다. Math.max(1,2,3,4) 이런 식으로 말이다.

따라서 spread operator를 사용하여 배열을 매개변수에 넣어야만 최댓값을 구해준다.

MDN에 따르면 배열 요소가 너무 많을 경우에 spread operator의 방법이 잘못된 반환값을 제공한다고 한다.

그래서 reduce함수를 이용한 방법은 안전하다고 하니 이 부분도 기억하자.

const arr = [1,4,5,6,2,3]

Math.max(...arr)
Math.min(...arr)

3. 주요 문제 풀이

3-1. 행렬의 곱셈(링크)

- 풀이방법

  1. 행렬의 곱셈이 가지는 원리부터 알아야 한다.
    1-1. [3행2열]행렬 * [2행 4열]행렬 = [3행4열] 행렬이 나온다.
    1-2. 위에서 파생된 것이 앞의 행렬의 열과 뒤의 행렬의 행이 같아야한다는 것이다.
  2. 삼중 for문으로 푸는 것은 금방 캐치할 수 있다.
  3. 예시문제는 행렬 곱셈의 원칙을 지키지 않아도 맞다고 나오기 때문에, 행렬곱셈의 원칙을 처음부터 모르면 풀 수 없는 문제에 가까워진다.

- 코드

function solution(arr1, arr2) {
    var answer = [];
    for(let i = 0; i < arr1.length; i++){
        const tarr = []
        for(let j = 0; j < arr2[0].length; j++){ 
            let t = 0
            for(let k = 0; k < arr2.length; k++){ 
                t += arr1[i][k] * arr2[k][j]
            }      
            tarr.push(t)
        }
        answer.push(tarr)
    }
    return answer;
}
profile
두 발로 매일 정진하는 두발자, 강세훈입니다. 저는 '두 발'이라는 이 단어를 참 좋아합니다. 이 말이 주는 건강, 정직 그리고 성실의 느낌이 제가 주는 분위기가 되었으면 좋겠습니다.

0개의 댓글