알고리즘 코플릿을 풀어가는 중이다. 이번주 금요일까지 그동안 풀어온 모든 코플릿의 답안 작성이 이루어져야 한다. 반복문 하나, 객체 하나와 아직 풀지 못한 알고리즘 문제들이 남았다. 알고리즘 베이직 코플릿은 그동안 풀어 온 코플릿들의 심화 + 종합선물세트이다.
어마어마한 난이도에 매 문제마다 감탄하고 있다. 하이라이트 문제가 너무도 많고 많지만.. 풀었던 것 중에 그나마 제일 쉬운 것부터 해야지
오늘의 하이라이트 문제
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 |
댓글