문제
병든 나이트가 N × M 크기 체스판의 가장 왼쪽아래 칸에 위치해 있다. 병든 나이트는 건강한 보통 체스의 나이트와 다르게 4가지로만 움직일 수 있다.
- 2칸 위로, 1칸 오른쪽
- 1칸 위로, 2칸 오른쪽
- 1칸 아래로, 2칸 오른쪽
- 2칸 아래로, 1칸 오른쪽
병든 나이트는 여행을 시작하려고 하고, 여행을 하면서 방문한 칸의 수를 최대로 하려고 한다. 병든 나이트의 이동 횟수가 4번보다 적지 않다면, 이동 방법을 모두 한 번씩 사용해야 한다. 이동 횟수가 4번보다 적은 경우(방문한 칸이 5개 미만)에는 이동 방법에 대한 제약이 없다.
체스판의 크기가 주어졌을 때, 병든 나이트가 여행에서 방문할 수 있는 칸의 최대 개수를 구해보자.
입력
첫째 줄에 체스판의 세로 길이 N와 가로 길이 M이 주어진다. N과 M은 2,000,000,000보다 작거나 같은 자연수이다.
출력
병든 나이트가 여행에서 방문할 수 있는 칸의 개수중 최댓값을 출력한다.
풀이
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
if n == 1:
print(1)
elif n == 2:
print(min(4, (m+1)//2))
elif m < 7:
print(min(4, m))
else:
print(m-2)
n, m이 최대 10억개이므로 DFS는 못쓴다라는 사실을 알아야한다~
가로 길이가 중요함을 알아야하며, 문제에서 방문한 칸이 5개 미만일 경우 이동 방법에 대한 제약이 없다했으므로
최소 이동 4번 하려면 가로로 몇 칸이상이 필요한지 알아야한다
1~10까지 시뮬 몇 번 해보면 상단과 같은 코드 결과를 알 수 있음
문제 출처
'코테정복💫 > 파이썬 PYTHON' 카테고리의 다른 글
99클럽 코테 스터디 12일차 TIL + 포도주 시식 DP (0) | 2025.04.16 |
---|---|
99클럽 코테 스터디 11일차 TIL + 과자 나눠주기 이분 탐색 (0) | 2025.04.15 |
99클럽 코테 스터디 9일차 TIL + 저울 Greedy (0) | 2025.04.10 |
99클럽 코테 스터디 8일차 TIL + 한국이 그리울 땐 서버에 접속하지 (0) | 2025.04.09 |
99클럽 코테 스터디 7일차 TIL + 쇠막대기 Stack (0) | 2025.04.09 |