관리 메뉴

커리까지

[백준] 1783번 병든 나이트 파이썬 본문

알고리즘/풀이

[백준] 1783번 병든 나이트 파이썬

목표는 커리 2021. 4. 22. 22:43
728x90
SMALL

문제

병든 나이트가 N × M 크기 체스판의 가장 왼쪽아래 칸에 위치해 있다. 병든 나이트는 건강한 보통 체스의 나이트와 다르게 4가지로만 움직일 수 있다.

  1. 2칸 위로, 1칸 오른쪽
  2. 1칸 위로, 2칸 오른쪽
  3. 1칸 아래로, 2칸 오른쪽
  4. 2칸 아래로, 1칸 오른쪽

병든 나이트는 여행을 시작하려고 하고, 여행을 하면서 방문한 칸의 수를 최대로 하려고 한다. 병든 나이트의 이동 횟수가 4번보다 적지 않다면, 이동 방법을 모두 한 번씩 사용해야 한다. 이동 횟수가 4번보다 적은 경우(방문한 칸이 5개 미만)에는 이동 방법에 대한 제약이 없다.

체스판의 크기가 주어졌을 때, 병든 나이트가 여행에서 방문할 수 있는 칸의 최대 개수를 구해보자.

입력

첫째 줄에 체스판의 세로 길이 N와 가로 길이 M이 주어진다. N과 M은 2,000,000,000보다 작거나 같은 자연수이다.

출력

병든 나이트가 여행에서 방문할 수 있는 칸의 개수중 최댓값을 출력한다.

예제 입력 1

100 50

예제 출력 1

48

예제 입력 2

1 1

예제 출력 2

1

예제 입력 3

17 5

예제 출력 3

4

예제 입력 4

2 4

예제 출력 4

2

예제 입력 5

20 4

예제 출력 5

4

제출 답안

import sys
input = sys.stdin.readline

def max_box(n):
    if n == 1:
        print(1)
    elif n == 2:
        print(min(4, (m+1)//2))
    else:
        if m <= 6:
            print(min(4, m))
        else:
            print(m-2)

n, m = map(int, input().split())
max_box(n)
  1. 우선 세로가 1이면 갈 수 있는 곳이 없어서 출발 지점 1을 출력한다.
  2. 세로가 2면 2와 3 방법으로 움직일 수 있다. 처음 칸의 가로를 더해서 m+1 / 2를 하고, 4와 비교하여 작은 값을 출력한다.
    1. 왜냐하면 모든 방법을 다 써야 4칸 넘어가는데 그렇지 못해서 그렇다.
  3. 세로는 충분하고 가로가 6보다 작다면 모든 방향으로 움직일 수 없다.
    1. 모든 방향이면 가로가 7이 되기때문에 가장 많이 방문하는 1,4를 쓴다.
  4. 그리고 모든 조건이 충분해서 4가지 방향으로 이동하는거면 처음에 4가지 방향 다쓰고 그다음부터는 1,4만 쓰기때문에 열에서 2,3에서 지나간 열2개를 빼서 출력한다.
728x90
LIST
Comments