https://www.acmicpc.net/problem/1783
1783번: 병든 나이트
첫째 줄에 체스판의 세로 길이 N와 가로 길이 M이 주어진다. N과 M은 2,000,000,000보다 작거나 같은 자연수이다.
www.acmicpc.net
문제
병든 나이트가 N × M 크기 체스판의 가장 왼쪽아래 칸에 위치해 있다. 병든 나이트는 건강한 보통 체스의 나이트와 다르게 4가지로만 움직일 수 있다.
- 2칸 위로, 1칸 오른쪽
- 1칸 위로, 2칸 오른쪽
- 1칸 아래로, 2칸 오른쪽
- 2칸 아래로, 1칸 오른쪽
병든 나이트는 여행을 시작하려고 하고, 여행을 하면서 방문한 칸의 수를 최대로 하려고 한다. 병든 나이트의 이동 횟수가 4번보다 적지 않다면, 이동 방법을 모두 한 번씩 사용해야 한다. 이동 횟수가 4번보다 적은 경우(방문한 칸이 5개 미만)에는 이동 방법에 대한 제약이 없다.
체스판의 크기가 주어졌을 때, 병든 나이트가 여행에서 방문할 수 있는 칸의 최대 개수를 구해보자.
입력
첫째 줄에 체스판의 세로 길이 N와 가로 길이 M이 주어진다. N과 M은 2,000,000,000보다 작거나 같은 자연수이다.
출력
병든 나이트가 여행에서 방문할 수 있는 칸의 개수중 최댓값을 출력한다.
풀이
1. N = 1
이동이 불가능하므로 1
2. N = 2
M 답
1 1
2 1
3 2
4 2
5 3
6 3
7 4
8 4
N=2일 경우 (M+1)//2이 답이 나온다
하지만 이동 횟수가 4번보다 적지 않다면, 이동 방법을 모두 한 번씩 사용해야 한다.
라는 조건으로 인하여 모든 N=2일 경우 4가지 이동이 불가능 하므로 4보다 크게 나올 수가 없다.
3 . N>=3
모든 이동이 가능하다
M 답
1 1
2 2
3 3
4 4
5 4
6 4
7 5
8 6
9 7
이동 횟수가 4번보다 적지 않다면, 이동 방법을 모두 한 번씩 사용해야 한다.
M이 6이하일 경우 이동 횟수가 4번보다 적으므로 최대 4까지만 올 수 있다.
코드
N, M = map(int, input().split())
if N==1:
print(1)
elif N==2:
print(min(4, (M+1)//2))
elif M <= 6:
print(min(4, M))
else:
print(M-2)
'알고리즘 > 백준' 카테고리의 다른 글
4796번: 캠핑 (0) | 2024.06.20 |
---|---|
5585번: 거스름돈 [python] (0) | 2024.06.20 |
27737 버섯농장 [파이썬] (1) | 2024.06.19 |
파이썬 / 9461번: 파도반 수열 (0) | 2024.01.07 |
파이썬 / 백준 1735번: 분수 합 (0) | 2024.01.06 |