본문 바로가기

알고리즘

[백준] 1783번 병든 나이트 C++ 문제풀이

https://www.acmicpc.net/problem/1783

 

1783번: 병든 나이트

첫째 줄에 체스판의 세로 길이 N와 가로 길이 M이 주어진다. N과 M은 2,000,000,000보다 작거나 같은 자연수이다.

www.acmicpc.net

문제 풀이

맨 처음에는 이동하려는 4가지 경우에 대한 함수를 작성해서 문제를 풀어보려 했으나 계속 틀렸다.

이 문제의 핵심은 나이트가 오른쪽으로만 이동한다는 것이다. 

만약 N == 1이라면 나이트는 움직일 수 없으므로 1을 출력하고

N == 2라면 2, 3의 방법만을 이용하고 최대 4회를 넘으면 안된다.

N이 3보다 큰 경우에는 세로에는 영향을 안받고 가로의 길이에 맞춰서 코드를 작성했다

 

소스 코드

#include <iostream>
using namespace std;

int main() {
	int N, M;
	cin >> N >> M;

	if (N == 1)
		cout << "1" << '\n';
	else if (N == 2) {
		cout << min(4, (M + 1) / 2) << endl;
	}
	else {
		if (M <= 6)
			cout << min(4, M) << endl;
		else
			cout << M - 2 << endl;
	}

}