[알고리즘]/백준

자바 - 구현 - 백준 1783 병든 나이트

broship 2021. 5. 26. 08:53

문제


 

 

 

문제해결


import java.util.Scanner;
/*
	1번: 2칸 위로, 1칸 오른쪽
	2번: 1칸 위로, 2칸 오른쪽
	3번: 1칸 아래로, 2칸 오른쪽
	4번: 2칸 아래로, 1칸 오른쪽
*/
public class S4_1783 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();

        int cnt = 0;

        if (n==1){//세로칸이 1일경우 이동 불가
            cnt = 1;
        } else if (n==2){//세로칸이 2일경우 2,3번 방향으로만 이동 가능, 1~4번 전부 이동 불가능
            cnt = Math.min((m+1)/2, 4);
        } else{//세로칸이 3칸 이상일 경우
            if (m<7){
                cnt = Math.min(m, 4);
            } else {
                cnt = m - 2;
            }
        }
        System.out.println(cnt);

    }
}

- 배열과 재귀함수를 사용해서 문제를 풀려 했으나 도저히 풀리지가 않아 구글링을 하였다...

https://songwonseok.github.io/algorithm/BOJ-1783/

 

백준 1783: 병든 나이트(Java)

문제링크 : https://www.acmicpc.net/problem/1783

songwonseok.github.io

- 이분처럼 직접 그림을 그려보니 이해가 되었다

- 문제가 주어진 조건은 나이트는 무조건 오른쪽으로만 이동이 가능하다

- 그렇다면 최대한 많은 곳을 여행하기 위해서는 오른쪽으로는 무조건 1칸씩만 가는 것이 이득이다

- 하지만 4칸 이상 이동할 경우 모든 방법을 다 사용해야 하기에 가로(m) 길이에서 -2를 해줘야 한다

- 4칸이상 이동할수 없는 경우 m만큼만 이동하거나 4만큼만 이동이 가능하다