[백준] 1783번 병든 나이트

개발자 P군·2024년 6월 6일
0
post-thumbnail
post-custom-banner

📖 문제

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

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

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

✍ 입력

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

📄 출력

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

✅ 코드

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();                   // 세로 길이
        int M = sc.nextInt();                   // 가로 길이

        int moveCount = 0;

        if(N == 1) {
            moveCount = 1;
        } else if(N == 2) {
            moveCount = Math.min(4, (M+1) / 2);
        } else if(M < 7) {
            moveCount = Math.min(4, M);
        } else {
            moveCount = M - 2;
        }

        System.out.println(moveCount);

    }
}

🧩 코드풀이

  1. 세로 길이 'N'과 가로 길이 'M'을 입력받는다.
  2. 세로가 1일 때는 1을 결과 값으로 출력합니다.
  3. 세로가 2일때는 '1칸 위로, 2칸 오른쪽', '1칸 아래로, 2칸 오른쪽' 두가지로 이동할 수 있기 때문에
    방문한 횟수가 4번보다 적을 때 값을 구하기 위한 (M+1 / 2) 과 4 중 더 작은 값을 결과 값으로 출력한다.
  4. 세로가 2보다 크고 가로가 7보다 작을 때는 '2칸 위로, 1칸 오른쪽', '2칸 아래로, 1칸 오른쪽'
    두가지로 이동해서 가장 큰 수로 만들 수 있기 때문에 4와 가로 길이중 더 작은 값을 출력한다.
  5. 이 외의 케이스는 병든 나이트가 이동할 수 있는 4가지를 전부 이동 할 수 있기 때문에
    가로길이에서 2를 뺀 값을 결과 값으로 출력한다.
profile
꾸준한 발전을 지향하는 개발자
post-custom-banner

0개의 댓글