본문 바로가기
코딩테스트/Cos Pro 1급 Java

[Cos Pro 1급 Java] [1차] 문제6) 체스의 나이트

by drCode 2021. 3. 15.
728x90
반응형

안녕하세요.

이번 포스팅은 Cos Pro 1급 Java 1차 6번 문제 체스의 나이트를 풀어보겠습니다.

 

edu.goorm.io/learn/lecture/17301/cos-pro-1%EA%B8%89-%EA%B8%B0%EC%B6%9C%EB%AC%B8%EC%A0%9C-java/lesson/839400/1%EC%B0%A8-%EB%AC%B8%EC%A0%9C6-%EC%B2%B4%EC%8A%A4%EC%9D%98-%EB%82%98%EC%9D%B4%ED%8A%B8-java

 

goorm

구름은 클라우드 기술을 이용하여 누구나 코딩을 배우고, 실력을 평가하고, 소프트웨어를 개발할 수 있는 클라우드 소프트웨어 생태계입니다.

www.goorm.io

※ 프로그램 구현문제

□ 문제설명

체스에서 나이트(knight)는 아래 그림과 같이 동그라미로 표시된 8개의 방향중 한 곳으로 한 번에 이동이 가능합니다.

단, 나이트는 체스판 밖으로는 이동할 수 없습니다.

체스판의 각 칸의 위치는 다음과 같이 표기합니다.

예를 들어, A번줄과 1번줄이 겹치는 부분은 'A1'이라고 합니다.

나이트의 위치 pos가 매개변수로 주어질 때, 나이트를 한 번 움직여서 이동할 수 있는 칸은 몇개인지 return 하도록 solution 함수를 완성해주세요.


□ 매개변수 설명

나이트의 위치 pos가 solution 함수의 매개변수로 주어집니다.

  • pos는 A부터 H까지의 대문자 알파벳 하나와 1 이상 8이하의 정수 하나로 이루어진 두 글자 문자열입니다.
  • 잘못된 위치가 주어지는 경우는 없습니다.

□ return 값 설명

나이트를 한 번 움직여서 이동할 수 있는 칸의 개수를 return 해주세요.


□ 예시

pos return
"A7" 3

□ 예시설명

나이트가 A7 위치에 있으면 아래 그림과 같이 왼쪽으로는 이동하지 못하고, 오른쪽으로는 맨 위를 제외한 나머지 세 칸으로 이동 가능합니다.

따라서, 3을 return 하면 됩니다.

 

※ 문제 접근 방식

(1) pos를 쪼겝니다.

(2) 각각 행과 열을 구해서 위치값을 나눕니다

(3) 현재 위치 pos를 기준으로 x - 2 y - 1, x - 2 y +1, x - 1 y - 2, x - 1 y + 2, y - 2 x - 1,  y - 2 x + 1, y - 1 x - 2, y - 1 x + 2이 체스판 범위에 있는지 구해줍니다.

 

import java.util.*;

class Main {
    public int solution(String pos) {
        int answer = 0;
        String[] info = pos.split("");
        int y = Integer.parseInt(info[1]) - 1;
        int x = 0;
        switch(pos) {
        	case "A" : x = 0; break; case "B" : x = 1; break; case "C" : x = 2; break; case "D" : x = 3; break;
        	case "E" : x = 4; break; case "F" : x = 5; break; case "G" : x = 6; break; case "H" : x = 7; break;
        }
        
        if(y -2 >= 0 && x -1 >= 0) answer++;
        if(x -2 >= 0 && y -1 >= 0) answer++;
        if(x +1 <= 7 && y -2 >= 0) answer++;
        if(x +2 <= 7 && y -2 >= 0) answer++;
        if(x -2 >= 0 && y -1 >= 0) answer++;
        if(x -1 >= 0 && y +1 <= 7) answer++;
        if(x +2 <= 7 && y +1 <= 7) answer++;
        
        return answer;
    }
    
    public static void main(String[] args) {
        Main sol = new Main();
        String pos = "A7";
        int ret = sol.solution(pos);
    	
        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        System.out.println("solution 메소드의 반환 값은 " + ret + " 입니다.");
    }
}
728x90
반응형

댓글