백준[1783] - 병든 나이트

문제

백준 1783 문제 보기

접근 방법

맵의 높이가 1일 때와 2일 때를 먼저 예외처리한다.

  • 맵의 높이가 2일 때, 이동 횟수가 4이상이 되면 모든 경우의 이동을 수행해야 하므로 이동을 3번 이내로 제한한다.

맵의 높이가 2보다 클 경우는 너비를 신경써서 예외처리한다.

  • 4가지 경우를 다 해보면 움직일수 있는 최대 너비가 7이 된다. 이후 접근해야하는 너비는 오른쪽으로 한칸씩 이동하면서 모든 너비에 접근이 가능하다.
  • 7보다 작을 경우 4와 비교해 계산한다.

코드

#include <iostream>
#include <algorithm>

using namespace std;

int height, width;

int main() {
    cin >> height >> width;

    if (height == 1) {
        cout << 1;
    } else if (height == 2) {
        cout << min(4, (width+1)/2);
    } else if (height >= 3) {
        if (width >= 7) {
            cout << width-2;
        } else {
            cout << min(4, width);
        }
    }

    cout << '\n';
    return 0;
}
Share