View
📚 문제
체스판과 같은 8 x 8 좌표 평면에서 나이트는 특정한 위치에서 다음과 같은 2가지 경우로 이동할 수 있다.
1. 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기
2. 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기
8 x 8 좌표 평면 상에서 나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램을 작성하시오. 이때 행 위치는 1부터 8로 표현하며, 열 위치는 a부터 h로 표현한다.
예를 들어 만약 나이트가 a1에 있을 때 이동할 수 있는 경우의 수는 다음 2가지이다.
1. 오른쪽으로 두칸 이동 후 아래로 한 칸 이동하기( c2)
2. 아래로 두 칸 이동 후 오른쪽으로 한 칸 이동하기 (b3)
또 다른 예로 나이트가 c2에 위치해 있다면 나이트가 이동할 수 있는 경우의 수는 6가지이다.
📝 문제 해결
dx,dy라는 별도의 리스트에 현재 위치를 기준으로 아래쪽과 오른쪽은 양수의 값을, 위쪽과 왼쪽은 음수의 값으로 이동경로 저장
-> 나이트의 현재 위치가 주어지면 현재 위치에 이동 경로를 더한 다음 8X8 좌표 평면에 있는지 확인
💻 코드
package implementation;
import java.util.Scanner;
public class impl_0516_4_3 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String inputData = sc.nextLine();
int row = inputData.charAt(1) - '0'; //'0'의 아스키코드는 48
int col = inputData.charAt(0) - 'a' + 1; //'a'의 아스키코드는 97
int[] dx = {-2, -1, 1, 2, 2, 1 ,-1, -2};
int[] dy = {-1, -2, -2, -1, 1 ,2 ,2, 1};
int result = 0;
for(int i = 0; i < 8; i++){
int nx = row + dx[i];
int ny = col + dy[i];
if(nx >= 1 && nx <= 8 && ny >= 1 && ny <= 8) result += 1;
}
System.out.println(result);
}
}
💡 chatAt(i)-'0' : 숫자형태의 String에서 int 변수로 변환
숫자 '1'의 아스키 코드 : 49
숫자 '0'의 아스키 코드 : 48
inputData.charAt(1) : inputData의 첫번째 문자를 가져옴
inputData.charAt(1) - '0' : inputData의 첫번째 문자열을 숫자로 변환
728x90
'알고리즘 > 이코테' 카테고리의 다른 글
[이진 탐색] 이코테 고정점 찾기(Java) (0) | 2022.12.07 |
---|---|
[구현] 이코테 게임 개발(Java) (0) | 2022.11.22 |
[동적 계획법] 이코테 못생긴 수(Java) (1) | 2022.11.16 |
reply