[이것이 코딩 테스트다 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.