fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 32714 (C++) 방벽 게임
최초 업로드: 2025-11-11 05:08:12
최근 수정 시간: 2025-11-11 05:08:12
게시자: rlatjwls3333
카테고리: 백준
조회수: 8
# [Silver II] 방벽 게임 [문제 링크](https://www.acmicpc.net/problem/32714) ## 문제 설명 <p>건덕이와 건구스는 $N$행 $2$열의 칸으로 이루어진 전장에서 승부를 겨루고 있다. 건덕이는 $1$행 $1$열에서 시작하여 말을 $N$행까지 이동해야 한다. 건구스는 칸과 칸 사이에 방벽을 설치하여 건덕이를 저지할 수 있다. </p> <p>게임은 아래의 순서로 건덕이의 말이 $N$행에 도달할 때까지 반복된다.</p> <ul> <li>건덕이가 말을 상하좌우로 인접한 칸으로 이동한다. 단, 현재 위치한 칸과 이동하려는 칸 사이에 방벽이 있는 경우 해당 칸으로 이동할 수 없다. </li> <li>건구스가 게임판 내에서 가로 또는 세로로 연속하는 두 칸을 선택하여 그 사이에 방벽을 설치한다. 단, 건덕이가 $N$행에 도달할 수 없게 막아버리면 안 된다. 조건에 맞게 방벽을 설치할 수 없거나 설치하고 싶지 않다면 차례를 넘길 수 있다.</li> </ul> <p>건덕이는 말을 최대한 빨리, 건구스는 최대한 늦게 $N$행에 도달하게 하고자 한다. 모두가 최선을 다할 때, 말이 $N$행에 도달하기 위한 이동 횟수를 구해보자.</p> ## 입력 <p>첫째 줄에 격자의 행 수 $N$이 주어진다. $\left(2 \leq N \leq 1,000,000\right)$</p> ## 출력 <p>말이 $N$행에 도달하기 위한 이동 횟수를 출력한다.</p> ## 풀이 - 3 이하일 때는 바로 앞을 막아 지그재그로 움직여 총 2(N-1)-1번의 이동이 필요합니다. - 4 이상일 때는 가운데를 먼저 막고 마지막 지점 앞을 막아 한 바퀴 돌게 만들어 N-2번 앞으로 이동 N-2번 뒤로 이동, 옆칸 앞으로 N번 이동으로 도착합니다. ``` c++ #include<bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int n; cin >> n; if(n<=3) cout << (n-1)*2-1; else cout << 3*n-4; } ```