1. 문제 링크
2. 문제 및 입출력예제
3. 문제 풀이
나이트의 이동 범위인지 확인하는 과정이 필요하다. 전에 있던 좌표와 x축 절댓값 차이가 2이면서 y축 절댓값 차이가 1인 경우거나 x축 절댓값 차이가 1이면서 y축 절댓값 차이가 2인 경우인지 판단한다. 또한 방문했던 좌표인지 확인하는 과정도 필요하다. 그 과정에서 flag가 바뀌었는지 판단해서 "Valid" 또는 "Invalid"를 출력한다.
4. 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
boolean[][] map = new boolean[6][7];
boolean flag = true;
String str = br.readLine();
int firstOne = str.charAt(0)-'A';
int firstTwo = str.charAt(1)-'0';
int bOne = firstOne;
int bTwo = firstTwo;
map[firstOne][firstTwo] = true;
for(int i=0;i<35;i++) {
str = br.readLine();
int one = str.charAt(0)-'A';
int two = str.charAt(1)-'0';
if((Math.abs(bOne-one)==2 && Math.abs(bTwo-two)==1)
|| (Math.abs(bOne-one)==1 && Math.abs(bTwo-two)==2)) {
if(map[one][two]) {
flag = false;
break;
}
map[one][two] = true;
bOne = one;
bTwo = two;
}
else {
flag = false;
break;
}
}
if(flag) {
if((Math.abs(bOne-firstOne)==2 && Math.abs(bTwo-firstTwo)==1)
|| (Math.abs(bOne-firstOne)==1 && Math.abs(bTwo-firstTwo)==2)) {
flag = true;
}
else {
flag = false;
}
}
if(flag) {
System.out.println("Valid");
}
else {
System.out.println("Invalid");
}
}
}
'ALGORITHM' 카테고리의 다른 글
백준 14499 주사위 굴리기 (Java) (1) | 2023.05.06 |
---|---|
백준 1012 유기농 배추 (Java) (0) | 2023.05.05 |
백준 7562 나이트의 이동 (Java) (0) | 2023.05.04 |
백준 4485 녹색 옷 입은 애가 젤다지? (Java) (0) | 2023.05.03 |
백준 4963 섬의 개수 (Java) (1) | 2023.05.02 |