프로그래머스 클래스룸

  • 문제의 제목을 입력합니다.

  • 응시자에게 표시되지 않으며, 내부 관리용으로 사용되는 제목입니다.

    • 예시) 머쓱이 대회 A부문 - 1번 문제

  • 이미지 및 링크, 표 삽입이 가능합니다.

  • </>와, CB는 각각 인라인 코드, 코드 블럭을 나타냅니다.

  • 보안 이슈로 실제 문제 페이지에서는 html이 작동하지 않습니다.

    마크다운 방식과 편집기의 기능을 활용하여 작성해 주세요.

    → 마크다운 작성법

  • 수식은 지문 입력 언어를 마크다운으로 선택 후 코드 블록(CB)을 열어 입력할 수 있습니다.

  • 수식 입력은 레이텍(latex) 문법을 사용합니다.

    → 레이텍(latex) 문법이란?

  • 수식 입력 시 가장 첫째 줄 ``` 옆에 latex를 입력 후 다음 줄 부터 수식을 입력합니다.

문제에 이미지 삽입하기

  • 문제 지문에만 이미지를 삽입할 수 있습니다. (보기에는 이미지 삽입 불가)

  • 이미지 파일을 직접 업로드 하시어 출제하실 것을 권장합니다.

    외부 링크 이미지 업로드 혹은 이미지 붙여넣기는 권장하지 않습니다.


응시자가 문제를 풀기 위해 초기에 제공받는 최상위 디렉토리입니다.

  • 이 폴더 내에는 응시 환경 설정 설명, 문제 지문, 그리고 각 파트별 스켈레톤(기본) 코드가 포함됩니다.

  • 플랫폼에 과제를 탑재할 때는 최종적으로 이 problem/ 폴더를 압축하거나 전용 스크립트를 통해 패키징하여 업로드합니다.

백엔드는 공통 문서 폴더(general/)와 언어별 빌드 폴더를 분리하여 구성합니다.

  • 기본형 (단일 스택 - Java Gradle 예시)

    Plaintext
    problem/
    ├── general/
    │   ├── data/               # 문제를 풀기 위해 제공되는 기본 데이터 변수/파일
    │   ├── 0.필독.md            # 응시 환경 설정 및 주의사항 설명 파일
    │   └── 2.문제.md            # 과제 요구사항 및 문제 설명 파일
    ├── gradle/                 # 자바(Gradle) 초기 스켈레톤 코드
    └── make-problem-zip.sh     # 플랫폼 탑재용 zip 파일을 만드는 쉘 스크립트
  • 확장형 (다중 스택 지원 예시)

    Plaintext
    problem/
    ├── general/
    │   ├── data/               # 문제를 풀기 위해 제공되는 기본 데이터 변수/파일
    │   ├── 0.필독.md            # 응시 환경 설정 및 주의사항 설명 파일
    │   └── 2.문제.md            # 과제 요구사항 및 문제 설명 파일
    ├── gradle/                 # 자바(Gradle) 초기 코드
    ├── maven/                  # 자바(Maven) 초기 코드
    ├── nodejs/                 # 자바스크립트(Node.js) 초기 코드
    ├── python/                 # 파이썬(Python) 초기 코드
    └── make-problem-zip.sh     # 플랫폼 탑재용 zip 파일을 만드는 쉘 스크립트


본 스크립트는 출제자가 구성한 로컬 폴더 구조를 Git 브랜치 기반의 독립된 개발 환경 구조로 자동 변환하고, 하나의 배포 패키지(git-problem.zip)로 제작하는 역할을 합니다.

  • 스크립트 예시

    출제자가 작성한 스크립트는 아래와 같은 구조와 순서로 동작합니다.

    가이드를 커스텀할 때 참고하시기 바랍니다.

    Plaintext
    # STEP 1. 빌드용 임시 작업 공간 생성 및 Git 초기화
    mkdir git-problem && cd git-problem
    git init
    
    # git local user 설정
    git config user.name "grepp"
    git config user.email "grepp@grepp"
    
    # STEP 2. 기본 브랜치(main) 구성 및 공통 안내서 커밋
    cp ../general/0.응시환경.md .
    git add . && git commit -m "add 0.응시환경.md"
    
    # STEP 3. 스택별 브랜치 분기 및 스켈레톤 코드 주입 (e.g. gradle 스택 예시)
    git checkout -b gradle
    git add . && git commit -m "add 2.문제.md"   # 공통 문제 지문 추가
    
    cp -r ../gradle/* .                         # 해당 스택의 초기 스켈레톤 코드 주입
    git add . && git commit -m "add gradle files"
    
    # STEP 4. 메인 브랜치 복귀 및 .git 폴더를 포함하여 전체 압축
    git checkout main
    zip -r git-problem.zip * .[^.]* # hidden 폴더(.git)를 포함하여 압축 실행
    
    # STEP 5. 배포 파일 추출 및 임시 폴더 클린업
    mv git-problem.zip ../
    cd .. && rm -rf git-problem

  • 주요 단계별 동작 프로세스 요약

    1. 작업 공간 초기화: 배포 생성을 위한 임시 빌드 디렉토리를 생성하고 플랫폼 표준 사용자 정보로 git init을 수행합니다.

    2. 기본 브랜치 빌드(main): 모든 응시자가 공통으로 보게 되는 안내 문서(0.응시환경.md)를 최초로 커밋합니다.

    3. 언어별 브랜치 분기 및 코드 주입: main에서 각 기술 스택 브랜치(예: gradle, nodejs 등)를 분기한 뒤, 출제자가 준비한 언어별 스켈레톤 코드를 루트 경로에 주입하고 독립 히스토리로 커밋합니다.

    4. 압축 패키징 및 클린업: 다시 main 브랜치로 전환한 후, 각 브랜치의 형상 관리 데이터 정보가 담긴 .git 폴더를 반드시 포함하여 전체 공간을 git-problem.zip으로 압축하고 임시 폴더는 삭제합니다.


과제 파일 작성이 완료되면 아래 절차에 따라 배포 파일 생성 및 플랫폼 정상 구동 여부를 검증해야 합니다.

1. 업로드용 패키지(git-problem.zip) 생성

  • 터미널에서 디렉토리 내에 포함된 쉘 스크립트를 실행하여 플랫폼 업로드용 압축 파일을 생성합니다.

    Plaintext
    sh make-problem-zip.sh
  • 스크립트 실행 결과로 생성된 git-problem.zip 파일을 업로드합니다.

2. 모의 테스트를 통한 검증

  • 플랫폼에 파일 업로드 후, 테스트 페이지를 생성하여 모의 테스트를 실행하고 아래 항목들을 점검합니다.

    • 첫 화면 랜딩 확인: 응시 첫 화면에서 main 브랜치의 0.필독.md 내용이 깨짐 없이 정상적으로 노출되는지 확인합니다.

    • Git 브랜치 구성 확인: 터미널 창에 git branch를 입력하여 출제 의도에 맞게 각 언어별/환경별 브랜치가 정상적으로 생성되어 있는지 확인합니다.

    • 초기 코드 및 스위칭 확인: git switch [브랜치명] 명령어로 각 언어별 환경으로 전환했을 때, 해당 스택의 초기 스켈레톤 코드가 누락 없이 존재하는지 확인합니다.


  • 기본형 (바닐라 자바스크립트 예시)

    Plaintext
    problem/
    ├── 필독.md                  # 문제 풀이 전 유의 사항 설명 파일
    ├── 문제.md                  # 과제 요구사항 및 문제 설명 파일
    ├── index.html              # 기본 HTML 템플릿 파일
    ├── index.js                # 애플리케이션 진입(Entry) 파일
    ├── style.css               # HTML 문서의 스타일 지정 파일
    ├── package.json            # 프로젝트 설정 및 의존성 라이브러리 파일
    └── ...                     # 문제 특성에 따라 추가되는 기타 파일
  • 확장형 (타입스크립트 TypeScript 예시)

    Plaintext
    problem/
    ├── 필독.md                  # 문제 풀이 전 유의 사항 설명 파일
    ├── 문제.md                  # 과제 요구사항 및 문제 설명 파일
    ├── public/                 # 컴파일이 필요 없는 정적 리소스 디렉토리 
    ├── src/                    # 개발 소스 코드가 모여있는 디렉토리
    │   ├── index.ts            # 타입스크립트 진입(Entry) 파일
    │   └── types.ts            # 공통 인터페이스 및 타입 정의 파일
    ├── package.json            # 프로젝트 설정 및 의존성 라이브러리 파일
    ├── tsconfig.json           # 타입스크립트 컴파일 설정 파일
    └── ...                     # 컴파일러/번들러 설정 파일 등 (예: vite.config.ts 등)


과제 파일 작성이 완료되면 아래 절차에 따라 배포 파일 생성 및 플랫폼 정상 구동 여부를 검증해야 합니다.

1. 탑재용 패키지(problem.zip) 생성

  • 터미널에서 zip 명령어를 사용하여 압축 파일을 생성합니다. 이때 불필요한 메타데이터나 로컬 환경 파일이 포함되지 않도록 제약 조건을 활용합니다.

    Plaintext
    # 예시: -x 옵션을 활용하여 불필요한 시스템 파일(.DS_Store 등)을 제외하고 압축
    zip -r problem.zip . -x '*.DS_Store*'
  • 압축 완료 후 생성된 problem.zip 파일을 업로드합니다.

2. 모의 테스트를 통한 검증

  • 플랫폼에 파일 업로드 후, 테스트 페이지를 생성하여 모의 테스트를 실행하고 아래 항목들을 점검합니다.

    • 파일 및 화면 노출 확인: 모의 테스트 진입 시 필독.md문제.md 내용이 정상적으로 노출되는지 확인합니다.

    • 개발 환경 구동 확인: 플랫폼 내 웹 컨테이너 환경에서 의존성 설치(npm install) 및 번들러 구동이 에러 없이 작동하는지 확인합니다.

    • 정적 리소스 로드 확인: public/ 디렉토리 내의 정적 파일(이미지, 아이콘 등)이 깨지지 않고 올바른 경로로 로드되는지 확인합니다.


플랫폼에서 응시자의 코드를 자동으로 채점하기 위한 테스트 케이스 코드와 빌드/실행 스크립트가 저장되는 최상위 디렉토리입니다.

  • 플랫폼 탑재 시에는 최종적으로 evaluation/ 폴더 내부를 압축하여 업로드해야 하며, 채점 프로세스를 제어하는 Procfile이 반드시 포함되어야 합니다.

    (채점 시 해당 파일을 트리거로 채점이 실행됩니다.)

  • Procfile은 채점 서버가 응시자의 코드를 빌드하고 테스트를 실행하는 단계를 정의하는 설정 파일입니다.

  • 기본 명령어 양식

    Plaintext
    ##### Profile 양식 #####
    
    init:          ## 데이터 폴더 대체 등 빌드 전 사전 작업 단계
    build:         ## 응시자 프로젝트 빌드 단계 (e.g. gradle build, npm install)
    run:           ## 응시자 프로젝트 실행 단계 (e.g. gradle run)
    prepare-test:  ## 테스트 코드 구동 준비 단계 (e.g. npm ci)
    test:          ## 테스트 코드 실행 및 채점 단계

    ✔️ 해당 과제에서 필요하지 않은 단계가 있다면 /bin/true를 작성하여 해당 단계를 에러 없이 건너뛸 수 있습니다.


응시자가 플랫폼에서 [코드 채점] 버튼을 누르면, 시스템 내부적으로 ‘응시자 환경(Project/)’의 모든 파일과 폴더가 ‘채점코드 환경(evaluation/)’의 루트 디렉토리 직하로 합쳐진 후 Procfile 명령어가 실행됩니다.

따라서 Procfile 스크립트와 test/ 내부의 테스트 케이스 경로는 반드시 아래의 [병합 후 최종 구조]를 기준으로 작성되어야 합니다.

  1. 응시자 환경 (제출된 소스 코드)

    • 응시자가 최종 시험을 치르고 제출한 시점의 프로젝트 구조입니다.

      Plaintext
      Project/ (응시자 환경 예시)
      ├── data/              # 문제 풀이용 기본 데이터 폴더
      ├── 0.필독.md           # 환경 설정 안내 파일
      ├── 2.문제.md           # 문제 지문 파일
      └── gradle/            # 응시자가 코드를 구현한 스프링 개발 환경 폴더
  2. 채점코드 환경 (출제자가 업로드한 테스트 코드)

    • 출제자가 플랫폼 채점 관리 화면에 evaluation.zip으로 탑재한 채점 스펙 구조입니다.

      Plaintext
      evaluation/ (출제자 채점 환경)
      ├── Procfile           # 자동 채점 프로세스 제어 파일 (필수)
      └── tests/             # 채점 테스트 케이스 폴더
          ├── problem.specs.js
          └── jest.config.js
  3. 채점 동작 환경

    • 채점이 시작되는 순간, 위의 두 환경이 결합하여 아래와 같은 하나의 트리 구조를 형성합니다.


Plaintext
evaluation
├── Procfile                  - 자동 채점을 위한 설정 파일          
├── tests                    - 자동 채점을 위한 폴더
    ├── problem.specs.js        - 테스트 케이스 코드가 작성된 파일
    ├── jest.config.js       - jest config 설정 파일
    ...                      - 이외의 파일 및 폴더는 문제마다 다르게 구성
  • 기본값 (Standard)

    적어주지 않은 단계는 플랫폼 기본 설정값으로 자동 수행됩니다.

  • 사용 예시 (특정 데이터 주입이 필요한 경우)

    테스트 실행 전 제공된 기본 데이터를 초기화하거나 교체해야 할 때(예: 숙박 예약 문제 등) init 단계를 활용합니다.


Plaintext
evaluation
├── Procfile                        - 자동 채점을 위한 설정 파일          
├── tests                          - 자동 채점을 위한 폴더
    ├── problem_1                  - 문제 별 테스트 코드 폴더
	      ├── test.spec.ts
    ├── IntegrationTests.spec.ts.  - 테스트 코드 통합 채점 파일
    ├── customerReporter.ts        - 채점 결과 파일
├── playwright.config.ts       - playwrigh config 파일
...                            - 이외의 파일 및 폴더는 문제마다 다르게 구성
  • 기본값 (Standard)

  • 사용 예시 (Playwright을 사용하여 테스트하는 경우)

    불필요한 빌드나 독립 구동 과정을 스킵하고 테스팅 도구 환경에 맞춰 단계를 완전히 덮어쓸 때 사용합니다.


모든 테스트 케이스와 Procfile 작성이 완료되면 아래 절차에 따라 압축하여 업로드합니다.

1. 필수 폴더 포함 여부 확인

  • 채점 파일 루트 경로에 Procfile 파일이 반드시 포함되어 있는지 사전에 확인합니다. (누락 시 채점 오작동 가능성 있음)

2. zip 명령어로 압축 파일 생성

  • 터미널에서 불필요한 OS 메타데이터를 제외하는 옵션을 사용해 evaluation.zip을 생성합니다.

    Plaintext
    zip -r evaluation.zip . -x '*.DS_Store*'

3. 파일 업로드

  • 생성이 완료된 evaluation.zip 파일을 플랫폼 채점 파일 업로드란에 탑재합니다.


  • 문제 풀이에 필요한 권장 시간을 입력합니다.

  • 실제 문제 풀이 제한 시간은 테스트 생성 시 설정할 수 있습니다.