문제

Baekjoon 1783: 병든 나이트

  • 설명: 오른쪽으로 4방향으로 이동하는 나이트가 있을 때 주어진 체스판에서 가장 많이 움직일 수 있는 칸을 구하여라

풀이

  • 주어진 조건
    1. 나이트는 오른쪽으로만 움직인다.
    2. 4번 이상 움직이기 위해서는 4가지 움직임을 모두 써야한다.
  • 도출할 수 있는 사실
    1. 세로의 크기는 3 이상이면 위아래 움직임을 상쇄시키면서 오른쪽으로 움직일 수 있으므로 세로의 크기는 1, 2, 3 세가지만 고려하면된다.
    2. 가로의 크기가 7 (2 + 2 + 1 + 1) 이상이면 4가지 움직임을 모두 쓸 수 있다.
  • 정리
    • 위의 제한 조건 안에서는 경우의 수를 따져서 값을 구한다.
    • 제한 조건을 넘어서는 부분에서는 (위 2, 오 1), (아 2, 오 1)로 반복해서 움직이면 최대한 많은 칸을 움직일 수 있다.
    • 따라서 4번 움직인 뒤 (총 5번 움직인 것) 남은 가로 칸을 1칸씩 움직이면 된다 ($m - 7$)

오늘의 회고

  • 오른쪽으로는 무한히 증가해야만 한다는 점에서 위의 규칙을 도출 할 수 있었다.
  • 조건을 굉장히 상세하게 짰지만 더 간단하게 수식으로 표현할 수 있을 것 같다.

Code

# Baekjoon01783.py
n, m = map(int, input().split())


if n == 1:
    ans = 1
elif n == 2:
    if m < 3:
        ans = 1
    elif m < 5:
        ans = 2
    elif m < 7:
        ans = 3
    else:
        ans = 4
else:
    if m == 1:
        ans = 1
    elif m == 2:
        ans = 2
    elif m == 3:
        ans = 3
    elif m <= 6:
        ans = 4
    else:
        ans = 5 + (m - 7)

print(ans)

필수 해시태그: # # # # #

+ Recent posts