[BOJ] 1783. 병든 나이트
1. 문제
병든 나이트가 N × M 크기 체스판의 가장 왼쪽 아래 칸에 위치해 있다. 병든 나이트는 건강한 보통 체스의 나이트와 다르게 4가지로만 움직일 수 있다.
- 2칸 위로, 1칸 오른쪽
- 1칸 위로, 2칸 오른쪽
- 1칸 아래로, 2칸 오른쪽
- 2칸 아래로, 1칸 오른쪽
병든 나이트는 여행을 시작하려고 하고, 여행을 하면서 방문한 칸의 수를 최대로 하려고 한다. 병든 나이트의 이동 횟수가 4번보다 적지 않다면, 이동 방법을 모두 한 번씩 사용해야 한다. 이동 횟수가 4번보다 적은 경우(방문한 칸이 5개 미만)에는 이동 방법에 대한 제약이 없다.
체스판의 크기가 주어졌을 때, 병든 나이트가 여행에서 방문할 수 있는 칸의 최대 개수를 구해보자.
2. 입력
첫째 줄에 체스판의 세로 길이 N와 가로 길이 M이 주어진다. N과 M은 2,000,000,000보다 작거나 같은 자연수이다.
3. 출력
병든 나이트가 여행에서 방문할 수 있는 칸의 개수중 최댓값을 출력한다.
4. 풀이
Python
N, M = map(int, input().split())
if N == 1:
print(1)
# 세로 길이가 1일 경우 움직일 수 없음
elif N == 2:
print(min(4, (M - 1) // 2 + 1))
# 2, 3번 방법만 사용 가능하므로, 최대 이동 횟수인 4와 가로 2칸씩 이동 시의 횟수 중 최솟값
elif M < 7:
print(min(4, M))
# 모든 방법 사용 가능하지만 가로 길이가 부족하므로 최대 이동 횟수인 4와 가로 길이 중 최솟값
else:
print(M - 2)
# 모든 방법 사용 가능하므로 가로 길이에서 2, 3번 방법 사용 시 필요한 여분의 두 칸을 뺀 값
C++
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int N, M;
cin >> N >> M;
if (N == 1) cout << 1;
else if (N == 2) cout << min(4, (M - 1) / 2 + 1);
else if (M < 7) cout << min(4, M);
else cout << M - 2;
}
Author And Source
이 문제에 관하여([BOJ] 1783. 병든 나이트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@leesu1012/BOJ-1783.-병든-나이트저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)