알고리즘 트러블슈팅
오늘은 알고리즘 문제를 풀며 마주했던 오류와 이 넘을 해결했던 과정을 간단히 정리해보자!

이 함수는 두 숫자로 이루어진 배열들을 요소로 갖는 배열을 매개변수로 받는다!
두 숫자로 이루어진 배열을 아들배열, 얘네를 가진 배열을 엄마배열이라 해보자!
아들배열의 두 숫자는 직사각형의 너비와 높이고, 우리는 아들배열들의 너비와 높이들을 비교해
각각의 최댓값의 곱을 구해야한다! 근데 직사각형을 돌릴 수가 있어서, 너비와 높이가 변할 수 있음!
그래서 우선 아들 녀석들을 모두 sort() 메서드를 통해 정렬해주고,
왼쪽 아들, 즉 0번째 인덱스 값을 widths란 배열에, 오른쪽 아들 1번째 인덱스 값을 heights 배열에 넣어줬다!
그리고 각 배열에서 최댓값을 찾고, 두 녀석을 곱해서 해피 엔딩이 될 줄 알았고,
테스트도 모두 통과했는데, 정답 제출에서 반타작이 난 것이였던 게 오늘의 문제 상황이었다!
사진에서 보다시피, 어제 배운 디버깅 요령을 활용해 테스트를 해봤는데, 정말 슬프게도 의도한대로 잘 작동하고 있었다...
그래서 얘는 안 되겠고, 반례를 찾기 위해 질문 탭을 열람해보았다!
그렇게 나와 비슷한 번호들을 틀린 몇 사람들의 반례를 가져와 테스트해보았으나, 역시 잘 작동했다 ㅠㅠ
결국 팀원분들께 SOS, 의외로 간단히 해결됐는데, 원인은 바로 sort() 메서드에 있었다!
sort()에 콜백함수를 주지 않으면, 각 요소를 문자열로 변환하고,
변환된 각 문자의 유니코드 코드 포인트 값에 따라 정렬되게 된다!
즉, 나는 숫자 비교를 하고싶은디, 이 녀석이 내 소중한 아들래미들을 문자로 바꿔 보고 있었던 것이다!

사진에서 잘리긴 했는디, 한 아들래미가 [50, 1]이다. 그리고 내 의도대로라면 이 녀석을 sort()했을 때,
작은 녀석이 앞으로 와야하니 [1, 50]이 돼야할 텐디, 4번에 보면 [50,1]의 결과물이 나온 걸 볼 수 있다!!
이처럼, 문자 이외의 값을 정렬하고자 할 땐, 콜백함수를 꼭 넣어줘야 원하는 결과를 얻을 수 있는 것이다!!

추가로 알게 된 점
forEach는 비동기를 기다려주지 않는단다. filter도 그랬는데 못 된 녀석들이다!
'TIL&WIL' 카테고리의 다른 글
241211 TIL - splice(), Node.js 내장 모듈, meta data, ESM, (0) | 2024.12.11 |
---|---|
241210 TIL - Promise.all, 터미널기본명령어, UTF, 트러블슈팅 (0) | 2024.12.10 |
7조 KPT 회고 (0) | 2024.12.09 |
241208 TIL - 알고리즘 깨달음 기록 (1) | 2024.12.08 |
20241207 TIL을 가장한 이번 주 회고 (1) | 2024.12.08 |