[Baekjoon] 1783번 병든 나이트
Updated:
문제
병든 나이트가 N × M 크기 체스판의 가장 왼쪽아래 칸에 위치해 있다. 병든 나이트는 건강한 보통 체스의 나이트와 다르게 4가지로만 움직일 수 있다.
- 2칸 위로, 1칸 오른쪽
- 1칸 위로, 2칸 오른쪽
- 1칸 아래로, 2칸 오른쪽
- 2칸 아래로, 1칸 오른쪽
병든 나이트는 여행을 시작하려고 하고, 여행을 하면서 방문한 칸의 수를 최대로 하려고 한다. 병든 나이트의 이동 횟수가 4번보다 적지 않다면, 이동 방법을 모두 한 번씩 사용해야 한다. 이동 횟수가 4번보다 적은 경우(방문한 칸이 5개 미만)에는 이동 방법에 대한 제약이 없다.
체스판의 크기가 주어졌을 때, 병든 나이트가 여행에서 방문할 수 있는 칸의 최대 개수를 구해보자.
입력
첫째 줄에 체스판의 세로 길이 N와 가로 길이 M이 주어진다. N과 M은 2,000,000,000보다 작거나 같은 자연수이다.
출력
병든 나이트가 여행에서 방문할 수 있는 칸의 개수중 최댓값을 출력한다.
예제
Example 1:
Input:
100 50
Output:
48
Example 2:
Input:
1 1
Output:
1
Example 3:
Input:
17 5
Output:
4
Example 4:
Input:
2 4
Output:
2
Example 5:
Input:
20 4
Output:
4
조건
시간 제한 : 2초
메모리 제한 : 128 MB
풀이과정
내 풀이
n, m = map(int,input().split())
# 4번보다 같거나 적은 경우에는 제약이 없음.
# 4번보다 많다면 이동 방법을 모두 한 번씩 사용해야 한다.
ans = 1
if n == 1:
print(ans)
elif n == 2:
ans += (m-1)//2
if ans >= 4:
print("4")
else:
print(ans)
# n >= 3
else:
if m >= 7:
ans += 4
print(ans+(m-7))
else:
ans += m-1
if ans >= 4:
print("4")
else:
print(ans)
여러 케이스르 나누어서 풀이하였다. 4가지방법은 모두 오른쪽으로만 움직이므로 세로길이를 기준으로 나눈다.
- 세로가 1이라면 움직일 수 없으므로 1을 출력한다.
- 세로가 2라면 위아래 1칸씩 움직일 수 있다. 이 경우를 모두 세는 대신에, 4를 넘어서면 4를 출력한다.
- 세로가 3이상이라면 위아래로는 4가지방법을 다 사용할 수 있다. 여기서 가로가 7이상이라면 4가지 방법을 다 사용할 수 있으므로 4를 더해주고, 1칸씩 가는것이 최대치이므로 m-7를 더해준다. 여기서 7미만이라면 4가지방법을 사용하지 못한다. 1칸씩 가는 것이 최선이므로 m-1을 더해주고 2와 같은 방식으로 출력한다.
Leave a comment