Skip to content

corn426/programers-datta

 
 

Repository files navigation

프로그래머스 과제 풀이

알고리즘 학습을 위한 프로그래머스 문제 풀이 과제 레포지토리입니다. TODO Tree로 주차별 문제를 확인하고, 테스트를 통과시키며 문제를 완성하는 방식으로 진행합니다.

🎯 학습 방식

  1. TODO Tree에서 이번 주 문제 확인 (WEEK1 태그)
  2. 문제 파일 열기 (힌트 확인)
  3. 코드 작성
  4. 테스트 실행 (처음엔 실패 ❌)
  5. 테스트 통과할 때까지 수정 반복
  6. 모든 테스트 통과하면 완성 ✅

🚀 시작하기

1. 저장소 클론 및 의존성 설치

# 저장소 클론
git clone <repository-url>
cd programers

# 의존성 설치 (pnpm 필수)
pnpm install

2. VS Code 확장 프로그램 설치

프로젝트를 VS Code로 열면 권장 확장 프로그램 설치 알림이 나타납니다. "Install All" 버튼을 클릭하거나 수동으로 설치하세요:

필수 확장 프로그램

  • Todo Tree - 주차별 문제 추적 (꼭 설치!)
  • Vitest - 테스트 실행 및 결과 확인
  • ESLint - 코드 품질 검사
  • Prettier - 코드 자동 포맷팅
  • SQLTools - SQL 문법 지원

3. Todo Tree로 이번 주 문제 확인

  1. 사이드바에서 Todo Tree 아이콘 (체크리스트) 클릭
  2. 필터에서 WEEK4 입력하여 이번 주 문제만 보기
  3. 문제 클릭하면 해당 파일로 이동

🧪 문제 풀이 워크플로우

Step 1: 문제 파일 열기

function solution(new_id: string): string {
  // 힌트를 보고 코드 작성
  return "";
}

Step 2: 테스트 실행 (실패 확인)

# 특정 세션 전체 테스트
pnpm test:run problems/session4

# 특정 문제만 테스트
pnpm test:run problems/session4/1

처음엔 모든 테스트가 **실패(❌)**합니다:

❌ 예제 1 - Expected 'bat.y.abcdefghi' but got ''
❌ 예제 2 - Expected 'z--' but got ''

Step 3: 코드 작성 및 테스트 재실행

코드를 수정하고 다시 테스트:

pnpm test:run problems/session4/1

Step 4: 모든 테스트 통과 확인

✅ 예제 1
✅ 예제 2
✅ 예제 3
Test Files  1 passed (1)
Tests  5 passed (5)

📝 문제 유형

TypeScript 문제

import { describe, test, expect } from "vitest";

/**
 * 문제: 신규 아이디 추천
 * 힌트:
 * 1. toLowerCase(): 대문자를 소문자로
 * 2. replace(/[^a-z0-9-_.]/g, ''): 정규식으로 특정 문자만 남기기
 */

function solution(new_id: string): string {
  return "";
}

describe("신규 아이디 추천", () => {
  test("예제 1", () => {
    expect(solution("...!@BaT#*..y.abcdefghijklm")).toBe("bat.y.abcdefghi");
  });
});

SQL 문제

.sql 파일에 쿼리를 작성하고, .ts 파일이 자동으로 테스트합니다:

-- problems/session4/sql/4_조건에_맞는_회원수_구하기.sql
-- 힌트:
-- 1. COUNT(*): 행의 개수 세기
-- 2. YEAR(날짜): 연도 추출
-- 3. BETWEEN A AND B: 범위 조건

SQL은 MySQL 문법으로 작성하되, 로컬 테스트는 SQLite(메모리 DB)로 자동 변환됩니다.

🧩 주차별 학습 주제

주차 주제 문제 수
Session 1 JavaScript 기본 (배열, 문자열) 8문제
Session 2 TypeScript 기본 (타입, 수학) 7문제
Session 3 TypeScript + SQL 기초 (SELECT, WHERE, ORDER BY) 3+3문제
Session 4 문자열 처리 + SQL 심화 (COUNT, CASE, GROUP BY) 3+5문제

🔧 유용한 명령어

# 전체 테스트 실행 (watch 모드)
pnpm test

# 전체 테스트 한 번만 실행
pnpm test:run

# 특정 세션만 테스트
pnpm test:run problems/session4

# 특정 문제만 테스트
pnpm test:run "신규 아이디"

# UI 모드로 테스트 (브라우저)
pnpm test:ui

🐛 SQL 테스트 관련 주의사항

프로그래머스 제출 시

프로그래머스는 MySQL을 사용하므로 다음 함수를 사용하세요:

  • YEAR(날짜) - 연도 추출
  • MONTH(날짜) - 월 추출
  • DATEDIFF(날짜1, 날짜2) - 날짜 차이
  • DATE_FORMAT(날짜, '%Y-%m-%d') - 날짜 포맷

로컬 테스트

로컬 테스트는 **SQLite (메모리 DB)**를 사용하지만, MySQL 함수가 자동으로 에뮬레이션되므로 동일한 SQL을 그대로 사용하면 됩니다

트러블슈팅

better-sqlite3 빌드 오류 (CI/로컬)

# macOS/Linux
pnpm rebuild better-sqlite3

# 실패하면 패키지 재설치
pnpm remove better-sqlite3
pnpm add -D better-sqlite3

Todo Tree가 안 보여요

  1. VS Code 리로드: Cmd/Ctrl + Shift + P → "Developer: Reload Window"
  2. Todo Tree 새로고침: Todo Tree 탭에서 새로고침 버튼 클릭
  3. 확장 프로그램 재설치

테스트가 실행되지 않아요

# node_modules 재설치
rm -rf node_modules pnpm-lock.yaml
pnpm install

🎓 학습 리소스

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • TypeScript 77.8%
  • JavaScript 22.2%