안녕하세요! Node.js와 TypeScript를 사랑하는 개발자입니다. 그동안 파이썬으로 알고리즘 문제를 풀곤 했는데요, 이제 제가 가장 좋아하는 언어인 TypeScript로 알고리즘 학습을 본격적으로 시작해 보려고 합니다.
해커랭크를 살펴보니 TypeScript로 해답을 제출할 수 있는 문제도 있지만, 그렇지 않은 문제도 있더라고요. 아쉽지만 TypeScript를 지원하지 않는 문제는 파이썬을 활용하고, 가능한 한 TypeScript로 꼼꼼하게 학습을 진행할 계획입니다.
가장 먼저 해야 할 일은 바로 TypeScript 개발 환경 구축이겠죠? 차근차근 따라오시면 쉽게 설정하실 수 있습니다.
알고리즘 문제 풀이를 위해 다음 도구들을 설치해 주세요.
TypeScript의 기본적인 실행 과정은 다음과 같습니다.
하지만 ts-node를 사용하면 이 두 단계를 한 번에 처리할 수 있어 매우 편리합니다.
ts-node를 사용하기 위해서는 프로젝트 루트 디렉터리에 tsconfig.json 파일을 정의해 주어야 합니다. 이 파일은 TypeScript 컴파일러 옵션을 설정하는 데 사용됩니다. 기본적인 tsconfig.json 파일은 다음과 같이 생성할 수 있습니다.
JSON
{ "compilerOptions": { "target": "ES2016", "module": "CommonJS", "outDir": "./dist", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true } }
그런데 해커랭크에서 제공하는 문제 풀이용 코드를 그대로 프로젝트에 복사하여 ts-node solve.ts와 같이 실행했을 때, 글로벌 변수 관련 에러가 발생할 수 있습니다. 이는 TypeScript가 프로젝트 내의 각 .ts 파일을 독립적인 모듈로 취급하기 때문에 발생하는 현상이라고 합니다.
이러한 에러를 해결하기 위해서는 tsconfig.json 파일의 compilerOptions에 다음 설정을 추가해 주면 됩니다.
JSON
{ "compilerOptions": { // ... 기존 설정 ... "moduleDetection": "force" } }
"moduleDetection": "force" 옵션을 설정하면 TypeScript는 모든 파일을 모듈로 처리하도록 강제하여 글로벌 변수 충돌 문제를 해결할 수 있습니다.
모든 설정이 완료되었다면 이제 해커랭크 문제의 입력 형식을 모방한 input.txt 파일을 생성하고 다음 명령어를 실행해 보세요.
Bash
ts-node solve.ts < input.txt
아무런 에러 메시지 없이 명령이 완료되었다면 TypeScript 실행 환경이 성공적으로 구축된 것입니다! 좀 더 확실하게 확인하고 싶다면 solve.ts 파일에 간단한 로그 출력 코드를 추가하여 실행 결과를 확인해 보는 것도 좋은 방법입니다.
예시 (solve.ts):
TypeScript
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n'); const a = parseInt(input[0]); const b = parseInt(input[1]); console.log(a + b);
위 코드를 작성하고 input.txt 파일에 다음과 같이 입력한 후 실행해 보세요.
5 3
터미널에 8이 출력된다면 모든 설정이 완벽하게 완료된 것입니다!
이제 TypeScript로 즐겁게 알고리즘 공부를 시작해 보세요! 😊