Skip to content

Latest commit

 

History

History
107 lines (82 loc) · 2.43 KB

File metadata and controls

107 lines (82 loc) · 2.43 KB

Simulation (시뮬레이션)

개념

문제에서 제시한 과정을 그대로 시뮬레이션하여 결과를 도출하는 유형입니다. 구현 문제의 일종이지만, 특히 과정을 순차적으로 따라가는 것이 핵심입니다.

특징

  • 문제에서 요구하는 과정을 정확히 구현
  • 시간 순서대로 상태 변화를 추적
  • 조건 분기가 많고 코드가 길어질 수 있음
  • 실수하기 쉬운 디테일이 많음

대표 문제 유형

1. 보드 시뮬레이션

  • 로봇 이동, 방향 전환
  • 뱀 게임
  • 주사위 굴리기
  • 테트리스

2. 시간 시뮬레이션

  • 초 단위로 상태 업데이트
  • 큐 시뮬레이션
  • 프로세스 스케줄링

3. 물리 시뮬레이션

  • 공 튀기기
  • 충돌 처리
  • 중력 시뮬레이션

4. 게임 시뮬레이션

  • 카드 게임
  • 보드 게임
  • 주사위 게임

구현 패턴

방향 전환

// 시계 방향 회전
int[] dx = {-1, 0, 1, 0}; // 북, 동, 남, 서
int[] dy = {0, 1, 0, -1};
int dir = 0;

// 시계 방향 90도 회전
dir = (dir + 1) % 4;

// 반시계 방향 90도 회전
dir = (dir + 3) % 4;

이동 시뮬레이션

while (시뮬레이션 조건) {
    // 1. 명령 읽기
    String command = readCommand();

    // 2. 상태 업데이트
    updateState(command);

    // 3. 유효성 검사
    if (!isValid()) {
        handleInvalid();
    }

    // 4. 시간 증가
    time++;
}

구현 시 주의사항

  1. 초기 상태 설정

    • 문제에서 주어진 초기 조건을 정확히 설정
  2. 경계 조건

    • 배열 범위, 이동 가능 영역 체크
  3. 방향 처리

    • 좌표계와 방향 정의를 명확히
  4. 시간/순서 관리

    • 이벤트가 발생하는 순서를 정확히 처리
  5. 상태 복사

    • 필요시 이전 상태를 저장

디버깅 팁

// 각 단계마다 상태 출력
void printState() {
    System.out.println("=== Step " + step + " ===");
    for (int i = 0; i < n; i++) {
        System.out.println(Arrays.toString(board[i]));
    }
    System.out.println();
}

풀이한 문제

번호 문제 제목 세부 알고리즘 난이도 상태 링크
- - - - - -