해커랭크 알고리즘 문제 풀이, 이제 TypeScript로 시작해 보세요!

안녕하세요! Node.js와 TypeScript를 사랑하는 개발자입니다. 그동안 파이썬으로 알고리즘 문제를 풀곤 했는데요, 이제 제가 가장 좋아하는 언어인 TypeScript로 알고리즘 학습을 본격적으로 시작해 보려고 합니다.

해커랭크를 살펴보니 TypeScript로 해답을 제출할 수 있는 문제도 있지만, 그렇지 않은 문제도 있더라고요. 아쉽지만 TypeScript를 지원하지 않는 문제는 파이썬을 활용하고, 가능한 한 TypeScript로 꼼꼼하게 학습을 진행할 계획입니다.

가장 먼저 해야 할 일은 바로 TypeScript 개발 환경 구축이겠죠? 차근차근 따라오시면 쉽게 설정하실 수 있습니다.

TypeScript 개발 환경 설정

알고리즘 문제 풀이를 위해 다음 도구들을 설치해 주세요.

  1. Node.js: JavaScript 런타임 환경입니다. TypeScript 코드를 실행하기 위해 필요합니다. (Node.js 공식 사이트)
  2. TypeScript: Microsoft에서 개발한 JavaScript의 Superset 언어입니다. 정적 타이핑을 지원하여 코드의 안정성을 높여줍니다. (npm install -g typescript)
  3. ts-node: TypeScript 코드를 JavaScript로 컴파일하는 과정 없이 바로 Node.js 환경에서 실행할 수 있도록 도와주는 편리한 도구입니다. (npm install -g ts-node)

TypeScript 실행 방식 이해

TypeScript의 기본적인 실행 과정은 다음과 같습니다.

  1. .ts 확장자를 가진 TypeScript 파일을 작성합니다.
  2. tsc 명령어를 사용하여 TypeScript 파일을 JavaScript 파일(.js)로 컴파일합니다.
  3. node 명령어를 사용하여 컴파일된 JavaScript 파일을 실행합니다.

하지만 ts-node를 사용하면 이 두 단계를 한 번에 처리할 수 있어 매우 편리합니다.

ts-node 설정: tsconfig.json

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 활용

모든 설정이 완료되었다면 이제 해커랭크 문제의 입력 형식을 모방한 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로 즐겁게 알고리즘 공부를 시작해 보세요! 😊