[백준] 1783번 - 병든 나이트
문제
문제
병든 나이트가 N × M 크기 체스판의 가장 왼쪽아래 칸에 위치해 있다. 병든 나이트는 건강한 보통 체스의 나이트와 다르게 4가지로만 움직일 수 있다.
- 2칸 위로, 1칸 오른쪽
- 1칸 위로, 2칸 오른쪽
- 1칸 아래로, 2칸 오른쪽
- 2칸 아래로, 1칸 오른쪽
병든 나이트는 여행을 시작하려고 하고, 여행을 하면서 방문한 칸의 수를 최대로 하려고 한다. 병든 나이트의 이동 횟수가 4번보다 적지 않다면, 이동 방법을 모두 한 번씩 사용해야 한다. 이동 횟수가 4번보다 적은 경우(방문한 칸이 5개 미만)에는 이동 방법에 대한 제약이 없다.
체스판의 크기가 주어졌을 때, 병든 나이트가 여행에서 방문할 수 있는 칸의 최대 개수를 구해보자.
입력
첫째 줄에 체스판의 세로 길이 N와 가로 길이 M이 주어진다. N과 M은 2,000,000,000보다 작거나 같은 자연수이다.
출력
병든 나이트가 여행에서 방문할 수 있는 칸의 개수중 최댓값을 출력한다.
풀이
아이디어
1) 문제를 살펴보면 병든 나이트는 오른쪽으로는 무조건 이동해야 하지만, 위,아래로는 최대 3칸 안에서 움직일 수 있다. 즉, N값이 3이상인 경우에는 N값이 결과값에 영향을 미치지 않는다는 말이다.
2) 문제의 조건을 모두 만족시키면서 가질 수 있는 N과 M의 최솟값을 구해보자.
-> N = 4, M = 7일때, 모든 조건을 만족시키고 칸의 최대 개수는 5가 된다.
3) 1)과 2)를 통해 N값은 3, M값은 7을 기준으로 경우의 수를 생각해봐야 한다는 사실을 도출해낼 수 있다.
아이디어 구체화
1) N 혹은 M값이 1이라면 1이 최대 개수
2) N이 2인 경우
- M이 3미만 => 1이 최대
- M이 3이상 5미만 => 2가 최대
- M이 5이상 7미만 => 3이 최대
- M이 7이상 => 4가 최대 (모든 방법을 사용할 수 없기 때문에, 최대 개수는 4)
3) N이 3이상인 경우
- M이 4미만 => M값이 최대
- M이 4이상 7미만 => 4가 최대
- M이 7이상 => 5+(M-7) = M-2
M이 7일 때 처음으로 모든 방법을 사용하면서 최대개수가 5가 되는 시점이기 때문에, M이 7이상인 구간에 대해서는 1회씩 증가되기 때문에 5+(M-7)이 되는 것이다.
코드
N, M = map(int,input().split())
if N == 1 or M == 1:
print(1)
elif N == 2:
if M < 3:
print(1)
elif 3 <= M < 5:
print(2)
elif 5 <= M < 7:
print(3)
else:
print(4)
elif N >= 3:
if M < 4:
print(M)
elif 4 <= M < 7:
print(4)
else:
print(M-2)
Author And Source
이 문제에 관하여([백준] 1783번 - 병든 나이트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yerimstar/백준-1783번-병든-나이트저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)