문제
병든 나이트가 N × M 크기 체스판의 가장 왼쪽아래 칸에 위치해 있다. 병든 나이트는 건강한 보통 체스의 나이트와
다르게 4가지로만 움직일 수 있다.
- 2칸 위로, 1칸 오른쪽
- 1칸 위로, 2칸 오른쪽
- 1칸 아래로, 2칸 오른쪽
- 2칸 아래로, 1칸 오른쪽
병든 나이트는 여행을 시작하려고 하고, 여행을 하면서 방문한 칸의 수를 최대로 하려고 한다.
병든 나이트의 이동 횟수가 4번보다 적지 않다면, 이동 방법을 모두 한 번씩 사용해야 한다.
이동 횟수가 4번보다 적은 경우(방문한 칸이 5개 미만)에는 이동 방법에 대한 제약이 없다.
체스판의 크기가 주어졌을 때, 병든 나이트가 여행에서 방문할 수 있는 칸의 최대 개수를 구해보자.
입력
첫째 줄에 체스판의 세로 길이 N와 가로 길이 M이 주어진다. N과 M은 2,000,000,000보다 작거나 같은 자연수이다.
출력
병든 나이트가 여행에서 방문할 수 있는 칸의 개수중 최댓값을 출력한다.
from sys import stdin
n, m = map(int, stdin.readline().split())
if n == 1: # 행이 1이면 이동불가
print(1)
elif n == 2: # 행이 2면 2,3번만 사용가능
# 이동횟수는 4미만으로
print(min(4, (m+1)//2))
else: # 행이 3이상
# m의 최솟값: 1 + (1 + 2 + 2 + 1)
# 처음 1칸과, 4번이상 이동할때의 최솟값은 모든 방법 한번씩 이용
if m < 7: # 4번 미만으로 이동할 경우
# 최댓값은 오른쪽으로 한칸씩만 이동할경우
print(min(4, m))
else: # 4번 이상 이동
# 오른쪽으로 2칸 이동하는 방법은 한번씩,
# 그 외는 모두 1칸씩 이동해야 최대,
# 2칸씩 이동하는 경우에만 중간이 빈칸 1개씩 있으므로 열의 개수 - 2
print(m-2)
'PS > 백준' 카테고리의 다른 글
백준 / 덱(Deque) / 1021번 / 회전하는 큐 / Python (0) | 2022.03.12 |
---|---|
백준 / 그리디 / 5585번 / 거스름돈 / Python (0) | 2022.03.12 |
백준 / 그리디 / 1080번 / 행렬 / Python (0) | 2022.03.12 |
백준 / 정수론 및 조합론 / 5086번 / 배수와 약수 / C++ (0) | 2022.02.05 |