반응형
문제
행복 왕국의 왕실 정원은 체스판과 같은 8 X 8 좌표 평면이다.
왕실 정원의 특정한 한 칸에 나이트가 서 있다. 나이트는 매우 충성스러운 신하로서 매일 무술을 연마한다.
나이트는 말을 타고 있기 때문에 이동을 할 때는 L자 형태로만 이동할 수 있으며
정원 밖으로는 나갈 수 없다.
1. 수평으로 두 칸, 수직으로 한 칸 이동
2. 수직으로 두 칸, 수평으로 한 칸 이동
좌표 평면상에 나이트의 위치가 주어졌을 때, 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램을 작성하시오.
행은 1-8, 열은 a-h로 표현한다. 좌표는 열행 순으로 표현한다.
입력조건
나이트의 현재 위치를 문자열로 입력한다. 예를 들어, a1와 같다.
출력조건
나이트가 현재 위치에서 이동 가능한 경우의 수를 출력한다.
풀이
나이트의 움직임은 8가지로 정의할 수 있다.
(위2, 왼1), (위2, 오1), (아래2, 왼1), (아래2, 오1), (위1, 왼2), (위1, 오2), (아래1, 왼2), (아래1, 오른2)
현재 위치에서 움직임에 따라 좌표 평면을 벗어나는 경우를 제외하고 모든 경우의 수를 더한다.
import java.util.*;
class Main {
public static void main(String[] args) {
// 입력
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
char y = input.charAt(0); // a-h
char x = input.charAt(1); // 1-8
sc.close();
// 나이트의 움직임 조건
int[][] move = {
{-2, -1}, {-2, 1},
{2, -1}, {2, 1},
{-1, -2}, {-1, 2},
{1, -2}, {1, 2}
};
// 현재 위치에서 움직임에 따른 좌표 평면 위치
int result = 0;
for (int[] m : move) {
char dx = (char)(x + m[0]);
char dy = (char)(y + m[1]);
if ((dx >= '1' && dx <= '8') && (dy >= 'a' && dy <= 'h')) {
result++;
}
}
System.out.println(result);
}
}
'Algorithm' 카테고리의 다른 글
[Algorithm] 음료수 얼려 먹기 (0) | 2021.05.11 |
---|---|
[Algorithm] 게임 개발 (0) | 2021.05.10 |
[Algorithm] 1이 될 때까지 (0) | 2021.05.08 |
[Algorithm] 숫자 카드 게임 (0) | 2021.05.07 |
[Algorithm] 큰 수의 법칙 (0) | 2021.05.06 |