0624 TIL 프로그래머스 코테연습

최소공배수와 최대공약수

function solution(a, b) {
  let answer = [];
  let r;
  let lcm = a * b;
  while( b != 0 ){
    r = a % b;
    a = b;
    b = r;
  }
  answer.push(a, lcm/a);
  return answer;
};

👉 풀이과정

  • 최대공약수 구하는 법 = a를 b로 나눈 나머지가 r일때 a와 b의 최대공약수는 b와 r의 최대공약수와 같다. 이 방법을 이용해 나머지가 0이 나올 때 까지 나누면 그 수가 최대공배수
  • 최소공배수 구하는 법 = a와 b의 최소공배수는 a와 b의 곱을 a와 b의 최대공약수로 나눈값.

a를 b로 나눈 나머지가 r일때 = r = a % b;
a와 b의 최대공약수는 b와 r = a = b; b = r;

a와 b의 곱을 a와 b의 최대공약수로 나눈값 = (a * b) / a)

행렬의 덧셈

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

👉 풀이 과정

  • for문으로 각 행렬의 같은 위치?에 있는 수 끼리 덧셈.

맨 처음 코드는 for문에 let a = arr1[i][j];, let b = arr2[i][j] 로 선언 후 answer.push([a+b])를 해줬었다. 문제는 arr[i][j] j 에 해당부분이 따로따로 나오는 결과가 나왔다. [[4],[6],[7],[9]]이런식으로...
해당 방법이 잘못됐다는 걸 알고 answer[i][j] = arr1[i][j] + arr2[i][j]로 변경했지만 answer array안에 공백이 있어서 에러가 남.
결과적으론 위의 방법처럼 arr1의 길이만큼 []를 넣어줬다.

👉 다른 사람의 풀이

return arr1.map((a, i) => a.map((b, j) => b + arr2[i][j]));

map메소드를 이용하면 엄청 간단하게 풀 수 있었다..
.map((currentValue, index)메소드 두 번째 인자로 현재값의 index를 사용할 수 있다.

행렬의 곱셈

function solution(arr1, arr2){
  let answer = [];
  const row = arr1.length;
  const col1 = arr1[0].length;
  const col2 = arr2[0].length;
  
  for(let i=0; i < row; i++){
    answer.push([]) // answer안에 arr1의 갯수만큼 []를 넣어줌
    for(let j=0; j < col2; j++){
      answer.push(0) // answer[]내부에 arr2[0]안에 있는 갯수만큼 숫자를 넣어줌
    }
  }
  
  for(let i=0; i < row; i++){
    for(let j=0; j < col2; j++){
      for(let k=0; k < col1; k++){
        answer[i][j] += arr1[i][k] * arr2[k][j];
      }
    }
  }
  return answer;
}

👉 풀이과정

행렬의 곱셈 공식이 기억 안나서 해당 문제의 입출력 예가 왜 저런 값을 가지는지 조차 몰랐다.
https://matrixcalc.org/ko
위의 행렬계산기 사이트를 이용, 왜 저 값이 나왔는지 까지 이해함.
초반에 정확히 인지하지 못하고
anwer[i][j] += arr[i][j] * arr2[j][i]이런식으로 푸니깐 빈 array들과 잘못된 값들이 출력됨. 노트에 곱셈 순서 값을 하나씩 적으니 많이 잘못됨을 알아냈따.

행렬의 곱셈 공식

C[i,j] = C[i,j] + A[i,k] * B[k,j];

위 공식대로 문제를 풀었다.
사실 머릿로 생각하면서 푼게 아닌 공식찾아 대입해서 푼 문제😥

좋은 웹페이지 즐겨찾기