본문 바로가기
코딩을 배울테야/Pre Course

37일차_20201020

by 도도 새 2020. 10. 21.

알고리즘 코플릿을 풀어가는 중이다. 이번주 금요일까지 그동안 풀어온 모든 코플릿의 답안 작성이 이루어져야 한다. 반복문 하나, 객체 하나와 아직 풀지 못한 알고리즘 문제들이 남았다. 알고리즘 베이직 코플릿은 그동안 풀어 온 코플릿들의 심화 + 종합선물세트이다.

어마어마한 난이도에 매 문제마다 감탄하고 있다. 하이라이트 문제가 너무도 많고 많지만.. 풀었던 것 중에 그나마 제일 쉬운 것부터 해야지

 

 

오늘의 하이라이트 문제

 

12_findBugInApples

 

  • 2차원 배열(배열을 요소로 갖는 배열)을 입력받아 'B'의 위치 정보를 요소로 갖는 배열을 리턴해야 합니다.
  • 'B'의 위치 정보(행, 열)를 요소로 갖는 배열을 리턴해야 합니다.
  • 배열의 요소는 차례대로 행, 열입니다. ([행, 열])
  • 행: 'B'를 요소로 갖는 배열 arr[i]의 인덱스 i
  • 열: arr[i]에서 'B'(arr[i][j])의 인덱스 j
  • arr, arr[i]의 길이는 다양하게 주어집니다.
  • 항상 한 개의 문자열 'B'가 존재합니다.

 

나의 풀이

 

 

function findBugInApples(arr) {
  let word = (element) => element === 'B'
  let newArr = []
  let letter = '';
  let letter1 = '';
  for(let i = 0; i < arr.length; i++) {
    if(arr[i].findIndex(word) !== -1) {
      letter = i
      letter1 = arr[i].findIndex(word)
    }
  }
  newArr.unshift(letter)
  newArr.push(letter1)
  return newArr; // TODO: 여기에 코드를 작성합니다.
}

 

 

레퍼런스

 

 

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

 

 

지금 글을 작성하면서 레퍼런스 코드를 처음 열어 봤는데 압도적인 코딩력의 차이가 느껴진다.

뭔가 꿇어라 이게 너와 나의 눈높이다 같은 느낌이랄까.

레퍼런스와 나의 풀이에서 제일 큰 차이점은 이중 for문의 사용 유무일 것이다.

레퍼런스에서는 이중 for문을 사용함으로써 코드의 길이 자체를 크게 줄였다. 쓸데없는 연산이 없어지니 메모리 누수도 없고, 시간도 절약될 것이고. 이중 for문을 사용할 줄 모르는 것도 아니었는데 왜 이중 for문을 사용할 생각을 못 한건지 모르겠다.

나의 풀이는 arr의 인덱스를 하나하나 뒤져서 'B' 가 들어있는 인덱스를 새로 만들어놓은 빈 배열에 앞, 뒤로 넣어 주는 방법이다.

레퍼런스 풀이대로 하였으면 아주 효과적일 것을 일을 2번 하는 코드를 짜놓았다.

'B' 를 찾으면 바로 x좌표 y좌표를 적어주는 레퍼런스와 가로줄에서 'B'를 한번 찾고 세로줄에서 'B'를 한번 더 찾아서 그 좌표값을 한번씩 넣어 주는 차이이니.. 인덱스가 적기 때문에 별 문제없이 돌아가는 코드일 것이다.

생각할 거리가 아직도 많다.

 

까먹고 안 쓸 뻔했는데 나의 풀이에서 얻어갈 만한 점이라고 한다면 let word = (element) => element === 'B' 일 것이다.

word 변수를 선언하는데

word는 (요소이다) => 요소는 'B' 와 일치한다 (===)

라고 사용하는 방법을 검색을 통해 찾아낸 것이다.

화살표 함수라는 것인데 무명의 함수를 생성하여 변수에 담아 주는 역할을 한다.. 고 한다.

word 변수에 (element === 'B') 라는 함수를 생성하여 담아 준 것이다.

얻어 걸린 느낌이 다분하지만 그래도 배운 점이 있다는 것은 긍정적이다.

오늘도 고생 많았다.

'코딩을 배울테야 > Pre Course' 카테고리의 다른 글

43일차_20201026  (0) 2020.10.27
문제가 풀리지 않을 때  (0) 2020.10.23
32일차_20201015  (0) 2020.10.16
24일차_20201007  (0) 2020.10.08
22일차_20201005  (0) 2020.10.06

댓글