[코드트리] 삼성 기출

코드트리 갬빗 프로세스 플로우차트

게임 루프 (최대 K턴 × 총 기물수 라운드)

메인 게임 루프
├── 턴별 라운드 실행 (order 배열 순서대로)
│   ├── 기물별 순차 행동
│   │   ├── King 행동 (체력 > 0인 경우만)
│   │   │   ├── 8방향 이동 시뮬레이션
│   │   │   │   ├── 각 방향별 보드 딥카피 생성
│   │   │   │   ├── moveKing() 호출: 밀치기 메커니즘
│   │   │   │   │   ├── 목표 칸이 빈 칸: 즉시 이동
│   │   │   │   │   ├── King ↔ King 충돌
│   │   │   │   │   │   ├── 데미지 계산 (같은 색: CA, 다른 색: CB)
│   │   │   │   │   │   ├── 피해 교환 후 체력 업데이트
│   │   │   │   │   │   └── 연쇄 밀치기 시뮬레이션
│   │   │   │   │   ├── King vs Pawn: King이 Pawn을 밀어냄
│   │   │   │   │   └── 보드 밖 처리
│   │   │   │   │       ├── King: 파괴 (체력 0)
│   │   │   │   │       └── Pawn: 특수 처리 (반대편 출현)
│   │   │   │   └── 8개 시뮬레이션 결과 상태 저장
│   │   │   │
│   │   │   ├── 선호도 기반 최적 방향 선택
│   │   │   │   ├── prefW/prefB[기물ID] 우선순위 배열 참조
│   │   │   │   ├── 평가 기준
│   │   │   │   │   ├── 1순위: Pawn 승진거리 최소화
│   │   │   │   │   └── 2순위: x좌표 작은 순
│   │   │   │   └── 이동 불가능한 방향 제외
│   │   │   └── 최종 상태 커밋 (보드, 위치, 체력 업데이트)
│   │   │
│   │   ├── Pawn 행동
│   │   │   ├── 연결 성분 크기 계산 (DFS)
│   │   │   │   ├── 같은 색 Pawn들의 8방향 연결성 탐색
│   │   │   │   └── 연결 성분 크기 반환
│   │   │   │
│   │   │   ├── 연결 성분 > 4개: 그룹 내부 스왑
│   │   │   │   ├── 연결된 모든 Pawn 위치 수집
│   │   │   │   ├── 각 위치별 평가 점수 계산
│   │   │   │   │   ├── 승진거리 (1순위)
│   │   │   │   │   └── 아군 King들과의 거리합 (2순위)
│   │   │   │   ├── 최적 위치 선정
│   │   │   │   └── 현재 위치와 최적 위치 스왑
│   │   │   │
│   │   │   └── 연결 성분 ≤ 4개: 1칸 이동
│   │   │       ├── 8방향 중 빈 칸만 고려
│   │   │       ├── 아군 King들과의 거리합 최소화
│   │   │       ├── 선호도 배열 순서로 방향 선택
│   │   │       └── 이동 실행
│   │   │
│   │   ├── 승진 검사 (매 기물 행동 후)
│   │   │   ├── Pawn 승진 라인 도달 여부 확인
│   │   │   │   ├── 흰 Pawn: 1행 도달 시 Queen 승진
│   │   │   │   └── 검은 Pawn: H행 도달 시 Queen 승진
│   │   │   │
│   │   │   └── 승진 시 onPromote() 실행
│   │   │       ├── Queen 위치에서 상대 King들에게 피해
│   │   │       │   ├── 거리제곱 역비례 피해 공식
│   │   │       │   └── 거리 d에 대해 50/d² 피해
│   │   │       ├── HP ≤ 0인 King들을 보드에서 제거
│   │   │       └── 즉시 게임 종료 (승부 결정)
│   │   │
│   │   └── 다음 기물로 순서 이동
│   │
│   ├── 라운드 완료 시 다음 턴으로
│   └── K턴 완료 또는 승진 발생시 게임 종료

└── 최종 보드 상태 출력
    ├── King: 'K1', 'k2' 등 (체력 > 0인 경우만)
    ├── Pawn: 'P'/'p' (승진 라인에서는 'Q'/'q')
    └── 빈 칸: '.'

핵심 알고리즘 세부 구조

1. 물리 시뮬레이션 엔진

2. 연결 성분 탐색 (DFS)

3. 평가 함수 시스템

4. 상태 관리 시스템

5. 승진 시스템

복잡도 분석

시간 복잡도:

  • King 행동: O(8 × 보드크기) - 8방향 시뮬레이션

  • Pawn 행동: O(보드크기) - DFS 연결성분 + 이동 평가

  • 전체 턴: O(K × 기물수 × 보드크기)

공간 복잡도:

  • 보드 상태: O(H × W)

  • 기물 정보: O(기물수)

  • DFS 스택: O(보드크기)

특이점:

  • 물리 시뮬레이션: 밀치기 연쇄반응으로 인한 복잡한 상태 변화

  • 전략적 AI: 선호도 배열 기반의 휴리스틱 의사결정

  • 동적 종료: 승진 발생시 즉시 게임 종료

  • 상태 롤백: 시뮬레이션 후 최적 선택을 위한 딥카피 활용

코드트리 갬빗은 세 문제 중 가장 복잡한 전략 시뮬레이션 게임으로, 물리 엔진 + AI 의사결정 + 복잡한 상태 관리가 모두 결합된 구조입니다.

코드

미생물 연구 프로세스 플로우차트

순차적 미생물 배치 및 상호작용 시뮬레이션

핵심 알고리즘 구조

1. 미생물 충돌 및 분할 시스템

2. 전체 재배치 시스템 (Compaction)

3. 인접성 및 상호작용 계산

자료구조 및 상태 관리

1. 핵심 자료구조

2. 연산 복잡도

실제 문제의 특징:

  • 기하학적 배치: 직사각형 미생물의 순차적 배치

  • 동적 분할: 충돌로 인한 미생물 분리 및 제거

  • 공간 최적화: 재배치를 통한 격자 공간 압축

  • 상호작용 계산: 인접 미생물들 간의 상호작용 점수

이 문제는 계산 기하학 + 동적 그래프 + 공간 최적화가 결합된 복합적 시뮬레이션입니다.

코드

민트초코우유 플로우차트

T일간 요리 집단 행동 시뮬레이션

핵심 알고리즘 구조

1. 그룹 형성 및 리더십 시스템

2. 음식 융합 시스템

3. 전파 우선순위 시스템

4. 전파 메커니즘

시뮬레이션 특성

1. 사회 역학

2. 문화 전파 모델

알고리즘 복잡도:

  • 시간 복잡도: O(T × N² × 그룹수)

  • 공간 복잡도: O(N² + 그룹수)

특이점:

  • 사회학적 시뮬레이션: 리더십, 위계질서, 집단 역학

  • 문화 융합 모델: 창조적 음식 조합 생성

  • 운명론적 방향성: 신앙심에 따른 확정적 행동

  • 우선순위 기반 행동: 복잡한 다중 기준 정렬

이 문제는 사회학 + 문화인류학 + 게임이론이 결합된 독특한 집단 행동 시뮬레이션입니다.

코드

메두사와 전사들 실제 구조 플로우차트

턴제 추격 및 생존 게임

핵심 알고리즘 구조

1. 복잡한 시야 시스템 (3갈래 확산 + 가려짐)

2. 전사 이동 전략 (거리 단축 우선)

3. 메두사 최적 경로 탐색

게임 역학 및 특성

1. 비대칭 게임플레이

2. 전략적 요소

알고리즘 복잡도:

  • 시간 복잡도: O(턴수 × (N² + M×이동횟수))

  • 공간 복잡도: O(N² + M)

특이점:

  • 복잡한 시야 시스템: 3갈래 확산 + 동적 가려짐 처리

  • 거리 기반 이동: 전사들의 지능적 추격 알고리즘

  • 비대칭 게임플레이: 서로 다른 능력과 목표

  • 실시간 전략: 매 턴 최적 선택이 승부 결정

메두사와 전사들은 비대칭 실시간 전략 게임의 특성을 가진 복잡한 추격 시뮬레이션입니다.

코드

고대문명 유적탐사 프로세스 플로우차트

게임 루프 (최대 K턴)

핵심 알고리즘 구조

1. 회전 시뮬레이션

2. 연결 그룹 탐색 (BFS)

3. 우선순위 결정

단순화 개선안

현재 코드가 복잡한 이유:

  1. 시뮬레이션과 실행을 분리: isReal 플래그 등 복잡한 구조

  2. 과도한 함수 분리: rotate, get, simulateRotation 등

  3. 불필요한 최적화: TreeSet 사용, 복잡한 Point 클래스

단순화된 구조:

훨씬 단순하게 만들 수 있지만, 현재 구조도 동작은 정상적으로 하므로 큰 문제는 아닙니다.

코드

마법의 숲 탐색 프로세스 플로우차트

메인 게임 루프 (K명의 정령)

핵심 물리 시뮬레이션

1. 골렘 이동 메커니즘

2. 정령 탐사 네트워크

3. 좌표계 관리

상태 관리 체계

1. 골렘 상태 추적

2. 이동 가능성 검사

3. 출구 시스템

알고리즘 복잡도

시간 복잡도:

  • 골렘 이동: O(K × R) - K개 골렘, 최대 R번 남쪽 이동

  • 정령 탐사: O(K × R × C) - K번의 BFS, 각 BFS는 O(R×C)

  • 전체: O(K × R × C)

공간 복잡도:

  • 보드: O(R × C)

  • 골렘 정보: O(K)

  • BFS 방문 배열: O(R × C)

  • 전체: O(R × C + K)

마법의 숲은 고대문명보다 복잡한 물리 시뮬레이션 (골렘 회전이동)과 네트워크 탐색 (정령 이동)이 결합된 구조입니다. 특히 골렘간 연결성을 통한 정령의 최적 경로 탐색이 핵심입니다.

코드

미지의 공간 탈출 프로세스 플로우차트

2단계 탈출 시뮬레이션

핵심 알고리즘 구조

1. 3D 큐브 면간 이동 시스템

2. 시간 이상 현상 확산 모델

알고리즘 복잡도:

  • Phase 1: O(5 × M² × 최대경로길이) - 3D BFS

  • Phase 2: O(N² × 최대시간) - 시간 종속 2D BFS

  • 전체: O(5M² + N²T) (T는 최대 탈출 시간)

특이점:

  • 3D 기하학: 복잡한 면간 좌표 변환

  • 시간 종속 그래프: 동적으로 변하는 장애물

  • 2단계 최적화: 각 단계별 독립적 최적 경로

  • 복합 제약 조건: 공간적 + 시간적 제약 동시 고려

미지의 공간 탈출은 3D 기하학 + 시간 종속 그래프 탐색이 결합된 매우 독특한 구조의 문제입니다.

코드

Last updated