pnpm, Vitest, TypeScript를 사용한 프로그래머스 알고리즘 문제 풀이 프로젝트입니다.
pnpm installproblems/
├── level1/
│ ├── 두개뽑아서더하기.js # JavaScript 예제
│ └── 완주하지못한선수.ts # TypeScript 예제
├── level2/
│ └── 기능개발.ts # TypeScript 예제 (Level 2)
└── level3/
각 문제는 하나의 파일에 문제 설명, 풀이 함수, 테스트 케이스를 모두 작성합니다.
import { describe, test, expect } from 'vitest';
/**
* 문제: 두 개 뽑아서 더하기
* 레벨: 1
* 링크: https://school.programmers.co.kr/learn/courses/30/lessons/68644
*/
function solution(numbers) {
// 여기에 코드 작성
const result = new Set();
for (let i = 0; i < numbers.length; i++) {
for (let j = i + 1; j < numbers.length; j++) {
result.add(numbers[i] + numbers[j]);
}
}
return [...result].sort((a, b) => a - b);
}
// 테스트 케이스
describe('두 개 뽑아서 더하기', () => {
test('예제 1', () => {
expect(solution([2, 1, 3, 4, 1])).toEqual([2, 3, 4, 5, 6, 7]);
});
});타입을 명시하여 더 안전한 코드를 작성할 수 있습니다.
import { describe, test, expect } from 'vitest';
/**
* 문제: 완주하지 못한 선수
* 레벨: 1
* 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42576
*/
function solution(participant: string[], completion: string[]): string {
const map = new Map<string, number>();
for (const name of participant) {
map.set(name, (map.get(name) || 0) + 1);
}
for (const name of completion) {
const count = map.get(name)!;
if (count === 1) {
map.delete(name);
} else {
map.set(name, count - 1);
}
}
return map.keys().next().value;
}
// 테스트 케이스
describe('완주하지 못한 선수', () => {
test('예제 1', () => {
expect(solution(['leo', 'kiki', 'eden'], ['eden', 'kiki'])).toBe('leo');
});
});pnpm testpnpm test 두개뽑아서더하기또는
pnpm test problems/level1/두개뽑아서더하기.jspnpm test:runpnpm test:ui- 파일명: 문제 이름을 한글로 작성해도 됩니다 (예:
두개뽑아서더하기.js또는완주하지못한선수.ts) - 레벨별 분류:
problems/level1/,problems/level2/등으로 분류 - Watch 모드: 파일 저장 시 자동으로 테스트가 실행됩니다
- 특정 테스트만: 파일명의 일부만 입력해도 해당 파일을 찾아 테스트합니다
- JS/TS 모두 지원: 편한 언어로 작성하세요. TypeScript는 타입 안정성을 제공합니다.
template.js 파일을 복사하여 시작하세요:
cp template.js problems/level1/새문제.jstemplate.ts 파일을 복사하여 시작하세요:
cp template.ts problems/level1/새문제.tstest()또는it(): 개별 테스트 케이스describe(): 테스트 그룹화expect(): 결과 검증test.only(): 특정 테스트만 실행test.skip(): 특정 테스트 건너뛰기
- pnpm: 빠르고 효율적인 패키지 매니저
- Vitest 2.1.9: 빠른 테스트 프레임워크
- TypeScript 5.9: 타입 안정성 제공
더 자세한 내용은 Vitest 공식 문서를 참고하세요.