Post

[이것이 코딩 테스트다 with Python] 왕실의 나이트(Java)

Goal

“이것이 코딩 테스트다 with Python” 교재의 문제를 분석하고 코드와 함께 이해해보기 위한 글입니다.

문제 분석

나이트가 이동할 수 있는 경로를 하나씩 확인하면서 이동하면 되고 주어진 공간은 8 x 8 크기이므로 시간 복잡도는 고려하지 않아도 될 것 같습니다. x, y 좌표의 이동으로 나이트의 위치 이동을 구현하고 알파벳으로 주어지는 열 값은 아스키코드 연산을 활용해 구현해보겠습니다.

코드 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class RoyalKnight {
    static int[][] move = new int[][] { //나이트가 이동할 수 있는 경우의 수
            {-1, 2}, {-1, -2}, {1, 2}, {1, -2}, {-2, 1}, {-2, -1}, {2, 1}, {2, -1}};

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        String sPoint = br.readLine(); //입력되는 시작점
        int cnt = 0;

        int x = sPoint.charAt(1) - '1'; //x좌표
        int y = sPoint.charAt(0) - 'a'; //y좌표

        for (int i = 0; i < 8; i++) {
            int curX = x + move[i][0]; //이동했을 때
            int curY = y + move[i][1];

            if (curX < 0 || curX > 7 || curY < 0 || curY > 7) continue; // 체스판을 벗어나지 않을 때마다
            cnt++; //횟수를 추가
        }

        bw.write(""+cnt);
        br.close();
        bw.close();
    }
}
This post is licensed under CC BY 4.0 by the author.