[卵の仮面]体現-<2>王室の夜
💡 問題の説明
幸福王国の王室庭園はチェス盤のような8×8座標平面です.王室の庭の格子にナイトが立っています.ナイトは乗馬中なので、移動時はL字形でしか移動できず、庭の外から出られません.特定の場所から次の2つの状況に移動できます.
このような8 x 8座標平面上でノードの位置を指定し、ノードが移動可能である場合は、プログラムを作成してその数を出力します.このとき,王室の庭における行為を表現する位置は1から8であり,表現列の位置はaからhである.
💡 入力例
a1
最初の行は、現在のナイトが位置する座標(列と行からなる)を与えます.💡 出力例
2
💡 ソリューションのアイデア&私の答え
1泊で移動できる総数が8種類なら、
(+1,+2)(-1,+2)(+2,+1)(+2,-1)(+1,-2)(-2,+1)(-2,-1).
現在位置で移動方向を1つずつ確認し、庭を出ない場合は、1の結果を増やせばよい.
import java.util.Scanner;
public class KnightOfKingdom {
public static void main(String[] args) {
// 현재 위치 좌표로 변환하기
Scanner sc = new Scanner(System.in);
String position = sc.next();
int col = position.charAt(0) - 'a' + 1;
int row = position.charAt(1) - '0';
int result = 0;
// 나이트가 이동할 수 있는 모든 방향
int[] canMove_x = {1, -1, 2, 2, 1, -1, -2, -2};
int[] canMove_y = {2, 2, 1, -1, -2, -2, 1, -1};
// 모든 방향을 이동해보며 정원 밖이 아닐 경우 result 추가해주기
for(int i=0; i<8; i++) {
int nx = col + canMove_x[i];
int ny = row + canMove_y[i];
if(nx < 1 || ny < 1 || nx > 8 || ny > 8) {
continue;
}
else {
result++;
}
}
System.out.println(result);
sc.close();
}
}
💡 サンプル回答
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 현재 나이트의 위치 입력받기
String inputData = sc.nextLine();
int row = inputData.charAt(1) - '0';
int column = inputData.charAt(0) - 'a' + 1;
// 나이트가 이동할 수 있는 8가지 방향 정의
int[] dx = {-2, -1, 1, 2, 2, 1, -1, -2};
int[] dy = {-1, -2, -2, -1, 1, 2, 2, 1};
// 8가지 방향에 대하여 각 위치로 이동이 가능한지 확인
int result = 0;
for (int i = 0; i < 8; i++) {
// 이동하고자 하는 위치 확인
int nextRow = row + dx[i];
int nextColumn = column + dy[i];
// 해당 위치로 이동이 가능하다면 카운트 증가
if (nextRow >= 1 && nextRow <= 8 && nextColumn >= 1 && nextColumn <= 8) {
result += 1;
}
}
System.out.println(result);
}
}
*ソース:https://github.com/ndb796/python-for-coding-testReference
この問題について([卵の仮面]体現-<2>王室の夜), 我々は、より多くの情報をここで見つけました https://velog.io/@ssue_sept22/알감탈-구현-2-왕실의-나이트テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol