로컬에서 LeetCode 테스트 환경 설정하기

LeetCode
국내에서 프로그래머스와 백준을 많이 사용하듯, 해외에서는 LeetCode로 알고리즘 문제를 풀고 기술 면접을 준비하는 경우가 많습니다.
알고리즘 문제가 실제 업무와 다르다는 의견도 있지만, 제한된 조건에서 문제를 분석하고 코드를 검증하는 연습에는 도움이 됩니다. 저도 시간이 날 때마다 문제를 풀고 있습니다.
기술 면접과 알고리즘 문제 풀이에 관한 참고 글은 다음과 같습니다.
- https://jessicahuh.tistory.com/entry/개발자-인터뷰-준비-Part1테크니컬-인터뷰-준비-방법
- https://inner-game.tistory.com/538
- https://sophuu.tistory.com/89
로컬 테스트 환경 준비하기
JavaScript로 문제를 풀기 위해 Node.js와 Jest로 테스트 환경을 구성합니다. 이 절차는 macOS에서 JavaScript 풀이 환경을 만드는 예입니다.
Node.js 설치

Node.js 공식 사이트에서 운영체제에 맞는 설치 파일을 내려받습니다. https://nodejs.org/en/
글 작성 시점의 LTS 버전은 16이었지만 지금은 지원이 끝났습니다. 설치 시점의 최신 LTS 버전을 사용하고, 여러 버전을 관리해야 한다면 nvm을 이용합니다.
Homebrew를 사용한다면 다음 명령으로 Node.js를 설치합니다.
$ brew install node
설치가 끝나면 Node.js와 npm 버전을 확인합니다. 아래 화면에 보이는 버전 번호는 글을 쓸 당시의 값입니다.
$ node -v
$ npm -v
Jest 전역 설치
Jest를 전역에 설치합니다. 권한 오류(EACCES)가 나면 sudo 대신 nvm으로 Node.js를 설치합니다.
$ npm install -g jest
설치 후 Jest 버전을 확인합니다.
$ jest --version
프로젝트 디렉터리 만들기
풀이를 둘 디렉터리에서 npm init -y를 실행합니다.
$ npm init -y
생성된 package.json에 다음 설정을 추가합니다. Jest 27부터는 node가 기본 테스트 환경이라 이 설정은 생략해도 됩니다.
{
// package.json의 다른 필드
"jest": {
"testEnvironment": "node"
}
}
문제별로 index.js와 test.js 만들기
문제 풀이를 작성할 index.js와 이를 검증할 test.js를 만듭니다.
index.js
function isPalindrome(s) {
// 여기서 문제 풀이
}
module.exports = isPalindrome;
test.js
const isPalindrome = require("./index"); // 풀이 함수를 불러옵니다.
test("'A man, a plan, a canal: Panama' returns true", () => {
expect(isPalindrome("A man, a plan, a canal: Panama")).toEqual(true);
});
Jest로 테스트 실행하기
프로젝트 루트의 터미널에서 다음 명령을 실행합니다.
jest DIRECTORY_PATH/test.js --watchAll
--watchAll 옵션을 사용하면 코드를 저장할 때마다 테스트를 다시 실행합니다.

앞에서 읽으나 뒤에서 읽으나 같은 문자열을 회문(Palindrome)이라고 합니다. 예제로 LeetCode 125번 문제를 풀어보겠습니다.

문제 설명의 입출력 예시와 Testcase 탭의 값을 Jest 테스트로 옮기면 로컬에서도 풀이 결과를 바로 확인할 수 있습니다.

이제 문제마다 같은 구조로 파일을 만들고 테스트를 추가하면 됩니다.
