자바로 백준 1331 풀기

hong030·2023년 5월 26일
0
  • 실버 5단계 문제

풀이)

나이트는 x방향으로 2칸 y 방향으로 1칸 or x방향으로 1칸 y방향으로 2칸 이동할 수 있으므로 이전 x좌표와 현재 x좌표, 이전 y좌표와 현재 y 좌표의 차를 절대값으로 구해 1, 2 또는 2, 1이 나온다면 이동할 수 있는 위치로 간주한다.

내 코드)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
 
public class Q1331 {
        public static int nowx, nowy, prevx, prevy;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        ArrayList<String> visit = new ArrayList<String>(); // 방문한 좌표를 저장하기 위한 리스트
        String st = br.readLine();
        
        int startx = st.charAt(0);    // 첫번째 위치를 저장해둠 
        int starty = st.charAt(1);
        prevx = startx;
        prevy = starty;
 
        visit.add(st);
        
        
        for(int i = 0; i < 35; i++) {
            String s = br.readLine();
            nowx = s.charAt(0);
            nowy = s.charAt(1);
            
            if(visit.contains(s)) {    // 방문한 적 있는 곳에 또 다시 방문하면 Invalid
                System.out.println("Invalid");
                return;
            }
            
            if(Math.abs(nowx - prevx) == 2 && Math.abs(nowy - prevy) == 1 || Math.abs(nowx - prevx) == 1 && Math.abs(nowy - prevy) == 2) {    // 나이트가 이전 위치에서 이동할 수 있는 위치가 아니면 Invalid
                
            }else {
                System.out.println("Invalid");
                return;
            }
            
            visit.add(s);
            prevx = nowx;
            prevy = nowy;
        }
        
        if(Math.abs(nowx - startx) == 2 && Math.abs(nowy - starty) == 1 || Math.abs(nowx - startx) == 1 && Math.abs(nowy - starty) == 2) {    // 마지막 도달위치에서 첫 번째 위치로 갈 수 없으면 Invalid
            
        }else {
            System.out.println("Invalid");
            return;
        }
        
        
        System.out.println("Valid");
    }
 
}
profile
자바 주력, 프론트 공부 중인 초보 개발자. / https://github.com/hongjaewonP

0개의 댓글