N, M = map(int, input().split())
if N == 1:
print(1)
elif N == 2:
print(min(4, (M+1) // 2))
else:
if M < 7:
print(min(4, M))
else:
print(M-2)
답을 알고 나니 코드는 정말 간단했다.
하다 하다 안되서 다른사람들의 풀이를 봤는데 접근방식 자체가 달랐다.
나는 문제를 읽고 나서 나이트가 움직일 수 있는 4가지 경우를 리스트에 담아, 한 번 한 번 움직이려고 했는데 그렇게
해보니 반복문의 중첩이 많아지고 잘못된 방식으로 풀고있다는 느낌이 들었다.
N, M = map(int, input().split())
moves = [(-2, 1), (-1, 2), (1, 2), (2, 1)]
now_row = N
now_column = 1
for move in moves:
next_row = now_row + move[0]
next_column = now_column + move[1]
구현문제에서 이렇게 풀었던 적이 있어서 그런지 이런식의 풀이 방법밖에 안떠올랐다.
이 방법은 나이트의 다음위치는 나타낼 수 있지만 움직일 때 마다 반복문을 써야해서 효율적인 풀이가 될 수 없다.
문제에서의 키포인트, 1. 오른쪽으로밖에 이동할 수 없다
2. 4가지 방법을 모두 사용한 후에는 오른쪽으로 한칸 움직이는 것이 최선이다.
는 점을 파악하지 못했다.
N과 M을 낮은 숫자부터 차근차근 생각해보면 규칙이 보인다.
하지만 이렇게 낮은 숫자부터 차근차근 생각해 볼 생각을 못했다,,,,,,,,,,
그냥 아직 경험이 부족한 것 같다.