[JS]_daily coding #13

seul·2022년 6월 10일
0

Algorithm

목록 보기
12/31

코플릿 데일리 코딩 12_findBugInApples


✏️ 수도코드

  1. 2차원 배열을 입력받아 'B'의 위치 정보를 배열로 반환, 예를들어 arr[i][j] === 'B'라면 결과는 [i, j]
  2. 결과를 담아줄 배열 선언
  3. arr의 요소(배열)를 순회하는 반복문 선언 (i를 통해서 0번 인덱스부터 arr 배열의 길이만큼 반복)
  4. 반복문 내부에서 arr[i]의 요소를 순회하는 반복문 선언(j를 통해서 0번 인덱스부터 arr[i] 배열의 길이만큼 반복)
  5. 중첩된 반복문 내부에서 arr[i][j]요소가 B와 같을 경우(if 조건문) ij를 결과 배열에 담아줌
  6. 결과 배열을 반환

🥳 첫번째 코드

function findBugInApples(arr) {
  const result = []
  for(let i = 0; i < arr.length ; i++) {
    for (let j = 0; j < arr[i].length ; j++) {
      if(arr[i][j] === 'B') {
        result.push(i, j)
      }
    }
  }
  return result
}

🙃 두번째 코드

for반복문을 forEach()로 바꿔서 풀어보았다.

function findBugInApples(arr) {
  let result = [];
  arr.forEach((row, i) =>
    row.forEach((el, j) => {
      if (el === 'B') {
        result.push(i, j);
      }
    })
  );

  return result;
}

프로그래머스 Lv.1_행렬의 덧셈

문제 설명
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.

제한 조건
행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.


🫥 수도코드

  1. 2차원 배열을 입력받아, 같은 위치(같은 행과 열)에 있는 요소들의 합을 구하고 같은 위치에 그 값을 넣은 배열을 반환해야 한다.
  2. 결과 값을 넣을 빈 배열을 선언해준다. (결과도 2차원 배열이어야 하기 때문)
  3. 반복문을 통해서 arr1의 요소(배열)를 순회 - i를 통해서 0번 인덱스부터 arr1의 길이만큼 반복함
  4. 합을 구한 값을 넣어줄 배열 선언
  5. 반복문 내부에서 arr1[i]의 요소를 순회 - j를 통해서 0번 인덱스부터 arr1[i]의 길이만큼 반복함
  6. arr1[i][j]와 같은 위치에 있는 arr2[i][j]를 더한 값을 합계 배열넣어준다.
  7. 중첩된 반복문을 빠져 나와서 결과 배열에 합계 배열을 담아준다.
  8. 결과 배열을 반환한다.

😐 첫번째 코드

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

😀 두번째 코드

합계 배열을 따로 선언하지 않고 result[i]에 빈 배열을 할당한 다음, 바로 값을 담아줄 수도 있다.

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

🥳 세번째 코드

레퍼런스 코드를 참고해, 고차함수를 사용해서 풀어봤다. arr1의 원소인 배열을 map함수를 이용해서 row로 받고 다시 이 row배열에 map함수를 써서 원소에 접근한다. 그 다음, 각각 인덱스(row들의 인덱스 i와, el들의 인덱스 j)를 통해 arr2[i][j]원소에 접근해서 합을 구한다.

function solution(arr1, arr2) {   
    let answer = arr1.map((row, i) => { 
        return row.map((el, j) => {
            return el + arr2[i][j]
        })
    })
    return answer
}
profile
Connecting dots

0개의 댓글