728x90
출처 : 1783번: 병든 나이트 (acmicpc.net)
문제
병든 나이트가 N × M 크기 체스판의 가장 왼쪽 아래 칸에 위치해 있다. 병든 나이트는 건강한 보통 체스의 나이트와 다르게 4가지로만 움직일 수 있다.
- 2칸 위로, 1칸 오른쪽
- 1칸 위로, 2칸 오른쪽
- 1칸 아래로, 2칸 오른쪽
- 2칸 아래로, 1칸 오른쪽
병든 나이트는 여행을 시작하려고 하고, 여행을 하면서 방문한 칸의 수를 최대로 하려고 한다. 병든 나이트의 이동 횟수가 4번보다 적지 않다면, 이동 방법을 모두 한 번씩 사용해야 한다. 이동 횟수가 4번보다 적은 경우(방문한 칸이 5개 미만)에는 이동 방법에 대한 제약이 없다.
체스판의 크기가 주어졌을 때, 병든 나이트가 여행에서 방문할 수 있는 칸의 최대 개수를 구해보자.
입력
첫째 줄에 체스판의 세로 길이 N와 가로 길이 M이 주어진다. N과 M은 2,000,000,000보다 작거나 같은 자연수이다.
출력
병든 나이트가 여행에서 방문할 수 있는 칸의 개수 중 최댓값을 출력한다.
[ 문제 설명 ]
그림으로 설명하겠습니다.
이문제는 원리는 찾고 그것을 코딩하는 방식이 dp에 가깝군요.
알고리즘 분류는 그리디와 가깝지만요.
아무래도 공식을 찾아나가는 과정이 그리디와 유사해서가 아닌가 쉽습니다.
[ 코드 ]
n, m = map(int, input().split())
if n == 1:
print(1)
elif n == 2:
k = int((m + 1) // 2)
print(min(k, 4))
elif m < 7:
print(min(4, m))
else:
print(m-7 + 5)
후기
사실 이문제는 나이도는 체감상 더 어렵다고 느껴지는데
왜 이렇게 쉽게 책정되었는지 모르겠습니다.
물론 코드는 쉽습니다.
하지만 이코드를 만드는 과정이 쉽다고 한다면 모르겠네요.
728x90
'백준 코딩 테스트' 카테고리의 다른 글
백준 11399번 - ATM (0) | 2021.04.05 |
---|---|
백준 1931번 - 회의실 배정 (0) | 2021.04.05 |
백준 10610번 - 30 (0) | 2021.03.18 |
백준 2875번 - 대회 or 인턴 (0) | 2021.03.11 |
백준 11047번 - 동전0 (0) | 2021.03.11 |