Algorithm/BOJ(Baekjoon Online Judge)

[백준 - 16948번] 데스나이트 - Java //Wello Horld//

koucop 2020. 3. 5. 13:55

 

 

이번에는 BOJ의 16948번 문제 "데스나이트" 를 풀어보도록 하자

 

 

입력으로 첫째 줄에 체스판의 크기가 주어지고 다음 줄에 r1, c1, r2, c2 가 주어진다.

출력으로 첫째 줄에 데스 나이트가 r1,c1 에서 r2, c2 로 이동하는 최소 이동 횟수를 출력하면 되는 문제이다. 이동할 수 없다면 -1 을 출력하면 된다.

성공한 코드는 아래와 같다.

 

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

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int N = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine());
        int r1 = Integer.parseInt(st.nextToken());
        int c1 = Integer.parseInt(st.nextToken());
        int r2 = Integer.parseInt(st.nextToken());
        int c2 = Integer.parseInt(st.nextToken());
        int r = Math.abs(r1 - r2);
        int c = Math.abs(c1 - c2);
        int cnt = 0;
        if(r % 2 == 1){
            cnt = -1;
        } else {
            int n = r / 2;
            for(int i = 0; i < n; i++){
                c = Math.abs(c - 1);
            }
            cnt += n;
            if(c % 2 == 1){
                cnt = -1;
            } else {
                n = c / 2;
                cnt += n;
            }
        }
        bw.write(cnt + "\n");

        bw.flush();
        br.close();
        bw.close();
    }
}

 

문제 : https://www.acmicpc.net/problem/16948

 

16948번: 데스 나이트

게임을 좋아하는 큐브러버는 체스에서 사용할 새로운 말 "데스 나이트"를 만들었다. 데스 나이트가 있는 곳이 (r, c)라면, (r-2, c-1), (r-2, c+1), (r, c-2), (r, c+2), (r+2, c-1), (r+2, c+1)로 이동할 수 있다. 크기가 N×N인 체스판과 두 칸 (r1, c1), (r2, c2)가 주어진다. 데스 나이트가 (r1, c1)에서 (r2, c2)로 이동하는 최소 이동 횟수를 구해보자. 체스판의 행과 열은 0번부

www.acmicpc.net

 

 

혹시 코드에 이상한 부분이나 틀린 부분이 있던지, 이해가 안가는 부분이 있다면 댓글로 알려주세요