TIL 231013

송용승·2023년 10월 18일
1

TIL

목록 보기
2/29
post-thumbnail

Today I learned

JavaScript 2주차 강의

2주차 강의를 모두 수강했다. 오히려 1주차보다 듣기 수월했다. 1주차에는 너무 생략하고 넘어가는 내용이 많아서 이걸 생략하네? 이건 설명해주는게 좋지 않나? 하는 생각을 너무 많이 했기 때문이다. 그리고 3주차가 조금 두려워졌다. 얕은 배움이 바닥을 드러내고있다!

이번주차에는 ES6(ES2015)버전에 추가된 새로운 기능의 설명이 주가 되었다.

  • let, const : 변수 선언 방식.

알고리즘 문제 풀이

이번주차 숙제 해결 과정에서 튜터님에게 처음 질문을 했다.

문제를 읽어보고 나서 문자열 리스트 strings를 sort함수의 아규먼트로 전달하되, 위와 같이 비교함수를 작성해서 순회할 문자열 a, b 를 n번째 인덱스에서 슬라이스 한 뒤 비교한 결과로 소팅을 하게 했다. 원본을 유지하고 얕은 복사를 하는 slice() 메서드를 이용하면 원본을 유지한 상태로도 문제에서 요구하는 정렬을 할 수 있지 않을까 싶었다. 이게 실수였다...

function solution(strings, n) {
  strings.sort((a, b) => {
    if (a.slice(n) > b.slice(n)) {
      return 1;
    }
    if (a.slice(n) < b.slice(n)) {
      return -1;
    }
    return 0;
  });
  return strings;
}

그렇게 답안을 작성하고 테스트를 해보니 통과가 되어 기쁜 마음으로 제출버튼을 눌렀는데 이게 웬 걸, 통과율이 25% 밖에 되지 않는 것이었다. 도대체 왜 그런지 한참을 고민해도 알 수가 없어 튜터님께 찾아가 내 코드를 설명드리고 어느 부분이 문제인지 여쭤봤더니 문제를 잘못 이해하고 있다고 말씀하셨다.

스파르타 즉문즉답

사전순으로 앞선 문자열이라는 것은 문자열 전체를 보는 것이었다. 생각해보면 당연한 건데, 이 마지막 항목을 잘못 이해하고 있었다. 그래서 25%의 통과율이 나왔구나. 내가 이 해결법의 '원본을 유지하고 얕은 복사를 한다' 라는 스마트한 점에 지나치게 매몰됐었던 것이다. 이게 막 되게 좋은 아이디어처럼 느껴져서 이것 말고 다른 생각을 해보지도 않은 것이다. 다시 방으로 돌아가 제한 조건을 다시 읽고, 숙고하여 답안을 작성했다. 흠. 기분이 좋지는 않았다. 하지만 튜터님 말씀 덕분에 경주마였던 내가 눈이 뜨였고 나의 실수를 제대로 볼 수 있었다.

한 가지 아이디어에 매몰되지 않기!!

를 새겼다.

profile
웹 프론트엔드 개발을 익히고 있습니다.

0개의 댓글