https://www.acmicpc.net/problem/1783
문제
병든 나이트가 N × M 크기 체스판의 가장 왼쪽아래 칸에 위치해 있다. 병든 나이트는 건강한 보통 체스의 나이트와 다르게 4가지로만 움직일 수 있다.
- 2칸 위로, 1칸 오른쪽
- 1칸 위로, 2칸 오른쪽
- 1칸 아래로, 2칸 오른쪽
- 2칸 아래로, 1칸 오른쪽
병든 나이트는 여행을 시작하려고 하고, 여행을 하면서 방문한 칸의 수를 최대로 하려고 한다. 병든 나이트의 이동 횟수가 4번보다 적지 않다면, 이동 방법을 모두 한 번씩 사용해야 한다. 이동 횟수가 4번보다 적은 경우(방문한 칸이 5개 미만)에는 이동 방법에 대한 제약이 없다.
체스판의 크기가 주어졌을 때, 병든 나이트가 여행에서 방문할 수 있는 칸의 최대 개수를 구해보자.
입력
첫째 줄에 체스판의 세로 길이 N와 가로 길이 M이 주어진다. N과 M은 2,000,000,000보다 작거나 같은 자연수이다.
출력
병든 나이트가 여행에서 방문할 수 있는 칸의 개수중 최댓값을 출력한다.
풀이
N의 경우만 나누어 주면 된다.
우선 N이 1일 때는 가능한 방법이 없다.
N이 2일 때는 2번과 3번만 번갈아 가며 사용해야 한다.
N이 3 이상일 때는, 1번이나 4번을 반복하는 것이 가장 이상적이다.
여기에 M에 따른 이동 횟수 제약까지 추가하여 코드를 구현하도록 한다.
소스 코드
n, m = input().split()
n, m = int(n), int(m)
cnt = 1
if n == 1:
pass
elif n == 2:
if m < 8:
cnt += (m-1) // 2
else:
cnt += 3
else:
if m < 5:
cnt += m-1
elif m < 7:
cnt += 3
elif m > 8:
cnt += 5 + m-8
else:
cnt += 3 + (m-4) // 2
print(cnt)
'알고리즘 공부 > 백준' 카테고리의 다른 글
백준 2847번: 게임을 만든 동준이 (파이썬) (0) | 2022.01.19 |
---|---|
백준 11000번: 강의실 배정 (파이썬) (0) | 2022.01.19 |
백준 1543번: 문서 검색 (파이썬) (0) | 2022.01.18 |
백준 1449번: 수리공 항승 (파이썬) (0) | 2022.01.18 |
백준 2437번: 저울 (파이썬) (0) | 2022.01.18 |