본문 바로가기

알고리즘/그리디 알고리즘

[백준 1783번] 병든 나이트 [JAVA]

1. 입력

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

 

 

2. 출력

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

 

 

3.문제풀이

세로가 1인 경우는 이동이 불가능 하기에 1이고

세로가 2인 경우에는

 

1칸 위로, 2칸 오른쪽

1칸 아래로, 2칸 오른쪽

 

조건만 활용이 가능합니다. 따라서 가로가 7이상이 되는 경우 횟수가 4번 이상 되기에 모든 조건을 활용할 수 없기에 Math.min(4,(M+1)/2)

 

가로가 7 이상인 경우에는 M-2입니다(모든 조건 활용가능)

7 미만인 경우에는 Math.min(4,M)입니다.

 

 

 

4.소스코드

import java.util.*;
import java.io.*;

public class Main {


    static int N,M;
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    static StringTokenizer st;


    public static void main(String[] args) throws IOException {
        int ans = 0;
        st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());

        if(N==1){
            ans = 1;
        }
        else if(N==2){
            ans = Math.min(4, (M+1)/2);
        }
        else if(M >= 7){
            ans = M-2;
        }else{
            ans = Math.min(4,M);
        }
        System.out.println(ans);



    }




}

'알고리즘 > 그리디 알고리즘' 카테고리의 다른 글

[백준 31926번] 밤양갱 [JAVA]  (0) 2024.06.02
[백준 1041번] 주사위 [JAVA]  (0) 2023.04.10