문제 : 8X8사이즈에 나이트 한마리가 있다. 나이트는 L자로만 이동 가능하다.
1. 수평으로 두칸 이동 후 수직으로 한칸
2. 수직으로 두칸 이동 후 수평으로 한칸
이때 나이트의 위치가 주어졌을때 나이트가 이동할 수 있는 경우의 수를 출력하라.
행은 1~8 열은 a~h다.
해결방안 :
1. 문자와 숫자를 문자로 받아서 쪼갠다.
2. 나이트가 이동할 수 있는 방향은 총 8가지 .(상하좌우 x 2가지 경우의 수)
3. for문으로 받은 xy좌표를 기준으로 경우의 수를 모두 더해본다.
4. 그래서 좌표를 벗어나는 경우는 배제하고 카운트한다.
Scanner input = new Scanner(System.in);
String dot = input.nextLine();
int x = dot.charAt(0) - 48; //문자 1은 int 49다. //-'0'도 가능하다. 자동형변환을 이용한것.
int y = dot.charAt(1) - 96; // 문자 a는 int 97이다.
// System.out.println(x);
//System.out.println(y);
int Count = 0; //경우의 수
int[][] Cases = {{-2,-1},{-2,1},{2,-1},{2,1},{-1,-2},{1,-2},{-1,2},{1,2}}; //8가지 경우의 수
for (int i=0;i< Cases.length;i++){
int dx =x;
int dy =y;
dx += Cases[i][0]; //경우의 수 에 따라 모든 경우의 수를 계산해본다.
dy += Cases[i][1];
if(dx <1 || dx >8 || dy <1 || dy>8) { //좌표를 벗어나는 경우 -> 음수거나 8보다 크면 해당 경우의 수는 배제한다.
continue;
}
Count +=1;
}
System.out.println(Count);
'알고리즘' 카테고리의 다른 글
알고리즘 구현 - 게임개발(java)(미완) (0) | 2023.05.04 |
---|---|
자바 알고리즘 구현 - 시각 (0) | 2023.05.02 |
알고리즘 구현 - 상하좌우 (0) | 2023.05.02 |
알고리즘 그리디 - 1이될때까지(java) (0) | 2023.04.29 |
알고리즘 그리디 - 숫자 카드게임(java) (1) | 2022.10.04 |