Skip to content

Latest commit

 

History

History
175 lines (98 loc) · 6.33 KB

mistakes.md

File metadata and controls

175 lines (98 loc) · 6.33 KB

실수리스트

2022-01-27

exec의 리턴값을 잘못 생각함.

정규식의 exec메소드는 일치하는 값만 반환하는게 아니라, [ '2', index: 2, input: 'is2 Thi1s T4est 3a', groups: undefined ] 이렇게 반환해준다. 인덱싱을 이용해서 값을 받아와야함.

2022-01-29

string.includes를 잘못 생각함.

string으로 받은 town 리스트(towns)에서, 특정 town이 존재하는지 검사하기 위해 towns.includes()를 사용했다. 하지만 이러면, "Lon"을 town으로 주면, "London"에 Lon을 보고 찾은걸로 인식해서, true를 반환하는 오류가 있는 함수가 되었다(towns의 이름과 완벽하게 일치하는지를 검사하고 싶었음). towns를 Array로 변환해서 includes를 사용하던가, 정규식을 이용하는 방법으로 해결해야함.

2022-01-31

Object 순회를 위해 for of문을 사용함.

Object를 순회하기 위해서는 for in이나 Object.keys, Object.values, Object.entries 메소드를 사용하면 됨.(후자가 성능이나 활용성면에서 좋아보임)

2022-02-01

내림 값을 받기 위해 / 연산자를 사용함.

숫자의 한자리씩을 추출하기 위해, %와 /를 사용했다.

while (n !== 0) {
  result += n % 10;
  n = n / 10;
}

c++의 정수 자료형을 사용하던 때의 습관이 남아있는 것 같다. 위의 코드는 456 % 10 = 6이고, 456 / 10은 내 계획대로라면 45여야 하지만, 45.6이 된다. javascript의 Number는 integer가 아님을 항상 생각하자.

substring의 인자를 잘못 생각함.

substring(i, 8)은 i부터 i + 8까지 자르는게 아니라, i부터 8까지이다.

2022-02-02

constructor에서 변수초기화를 잘못 생각함.

변수앞에 this.를 붙여줘야함.

2022-02-04

reduce의 return값을 잘못 설정함.

2022-02-06

배열을 거꾸로 순회하는 for문을 썼는데 습관적으로 증감식에 i++를 입력함.

2022-02-07

매개변수의 type을 검사하기위해 instanceof를 사용함.

instanceof은 객체의 프로토타입을 검사하는 연산자이기 때문에 string, boolean등의 primitive type에 대해서 작동하지 않는다. primitive type을 검사하기 위해선 typeof를 사용하자.

2022-02-08

Array.from을 이용한 배열 초기화에서 두번째 인자로 함수가 아닌 인자를 전달함.

const arr = Array.from({ length: 10 }, false); // 오류!
const arr = Array.from({ length: 10 }, () => false); // 콜백함수를 전달해야한다.

2022-02-10

m * n크기의 배열을 input으로 받았는데, 습관적으로 정사각형인 것처럼 풀이를 진행함.

2022-02-12

함수를 여러개를 사용한 문제풀이에서 테스트를 위한 console.log에 함수를 잘못 전달함.

2022-02-13

Math.floor를 Number.floor로 잘못 씀.

2022-02-19

swap을 해야하는 상황에서 구조분해할당을 사용하지 않아 과도하게 복잡한 코드를 작성함.

2022-02-20

크기가 다른 배열을 같은 for문으로 한 배열의 길이만큼 순회하여 문제가 발생함.

2022-02-23

내부 함수를 작성하고, 자꾸 호출을 까먹음

내부 함수를 이용해 코드를 작성했는데, 결과가 초기화되어있는 상태 그대로 나온다면, 작성한 내부 함수를 호출했는지 살펴보자.

2022-02-25

감소하는 for문을 작성하려 했는데, 습관적으로 증감식에 i++을 넣음.

2022-02-28

논리 연산 헷갈림

list1 !== null && list2 !== null;
// 둘중 하나라도 null이 되면 false임. (둘다 null이 아니어야 함)
// 헷갈리면 드모르간 법칙을 이용해 볼 수도 있겠다.

2022-03-02

undefined는 0이 아니다

undefined와 0을 검사하기 위해 다음과 같은 식을 작성했다.

if (someValue == 0)

위처럼 작성하면, someValue가 undefined일 때, undefined와 0가 false로 형변환이 되어서, true가 나올 줄 알았는데, 논리연산자를 사용한게 아니라서, boolean으로 형변환이 되지 않는 것이었다. 스택 오버플로우에 좋은 글이 있으니 한번 읽어보자. https://stackoverflow.com/questions/40615844/why-undefined-is-not-equal-to-zero-in-javascript

2022-03-03

visited표현 실수

2차원 배열 순회중, 방문한 곳을 표시하기 위해 다음과 같은 코드를 작성했다.

visited[`${y}${x}`] = true;

위의 코드느 오류의 원인이 되었다. 서로 다른 좌표가 같은 표현으로 저장될 수 있기 때문이다. 예를 들어 (1, 15)와 (11, 5)는 둘다 "115"로 저장된다. 이러한 케이스를 구별하기 위해 y와 x사이에 구분자를 넣도록 하자.

2022-03-05

정렬되지 않은 인풋을 이용한 이진탐색

예제 인풋이 정렬되어있어서 인풋을 이용해 이진탐색을 했는데, 나중에 정렬되어있지 않은 인풋이 들어와 오류가 발생했다. 앞으로 이진탐색을 이용할땐, 배열이 정렬되어있는지 꼭 확인하고, 정렬되어있지 않다면 정렬해야한다.

2022-03-23

반복문 안에서 Object.keys같은 메서드를 사용하기

Object.keys같은 메서드는 O(n)의 시간복잡도를 가진다. 따라서 해당 메서드를 반복문 안에서 사용하면 시간복잡도를 크게 늘릴 수 있다. 반복문 밖에서 한번 호출해서, 값을 저장한 후 사용하자.

2022-03-26

가변 배열의 길이를 for문의 종료 조건에 사용

큐를 이용한 bfs를 구현하다 낸 실수, 큐에서 노드를 하나씩 빼면서, 큐의 길이가 줄어들어, 예상한 것보다 for문이 일찍 종료됨.

2022-04-14

String.fromCharCode

알파벳을 표현한 0~25사이의 입력을 받았을 때, 이것을 알파벳으로 변경할 때 그대로 사용함.
'a'.charCodeAt(0)를 더해줘야 알파벳으로 변경할 수 있다.

2022-04-29

BFS 형태

유효한 좌표인지 검사하는 로직을 총 2개를 넣어야 한다.

  • shift 직후
  • push 직전

그렇지 않으면 무한 루프에 빠질 수 있다.

2022-05-28

shift vs unshift

  • shift랑 unshift가 헷갈린다...
  • shift는 밖으로 빼는 거, unshift는 집어넣는 건데...
  • shift는 옮긴다는 뜻을 가지고 있는데, 배열 밖으로 옮긴다고 생각하면 도움이 될까?