Notice
Recent Posts
Recent Comments
Link
관리 메뉴

Star_project

CosPro JAVA 1급 기출 3회 문제3 - 체스에서 비숍(Bishop) 말을 놓을 수 있는 빈칸의 개수 본문

코딩테스트/JAVA

CosPro JAVA 1급 기출 3회 문제3 - 체스에서 비숍(Bishop) 말을 놓을 수 있는 빈칸의 개수

star빛 2022. 6. 13. 21:54

#문제3
체스에서 비숍(Bishop)은 아래 그림과 같이 대각선 방향으로 몇 칸이든 한 번에 이동할 수 있습니다. 만약, 한 번에 이동 가능한 칸에 체스 말이 놓여있다면 그 체스 말을 잡을 수 있습니다.

bishop1.png

8 x 8 크기의 체스판 위에 여러 개의 비숍(Bishop)이 놓여있습니다. 이때, 비숍(Bishop)들에게 한 번에 잡히지 않도록 새로운 말을 놓을 수 있는 빈칸의 개수를 구하려고 합니다.

위 그림에서 원이 그려진 칸은 비숍에게 한 번에 잡히는 칸들이며, 따라서 체스 말을 놓을 수 있는 빈칸 개수는 50개입니다.

8 x 8 체스판에 놓인 비숍의 위치 bishops가 매개변수로 주어질 때, 비숍에게 한 번에 잡히지 않도록 새로운 체스 말을 놓을 수 있는 빈칸 개수를 return 하도록 solution 메소드를 완성해주세요.


#####매개변수 설명
체스판에 놓인 비숍의 위치 bishops가 solution 메소드의 매개변수로 주어집니다.

  • bishops는 비숍의 위치가 문자열 형태로 들어있는 배열입니다.
  • bishops의 길이는 1 이상 64 이하입니다.
  • 비숍이 놓인 위치는 알파벳 대문자와 숫자로 표기합니다.
    • 알파벳 대문자는 가로 방향, 숫자는 세로 방향 좌표를 나타냅니다.
    • 예를 들어 위 그림에서 비숍이 있는 칸은 "D5"라고 표현합니다.
  • 한 칸에 여러 비숍이 놓이거나, 잘못된 위치가 주어지는 경우는 없습니다.

#####return 값 설명
비숍에게 한 번에 잡히지 않도록 새로운 체스 말을 놓을 수 있는 빈칸의 개수를 return 해주세요.


#####예시

bishops return
["D5"] 50
["D5", "E8", "G2"] 42

#####예시 설명
예시 #1
문제에 나온 예시와 같습니다.

예시 #2

bishop2.png

그림과 같이 원이 그려진 칸은 비숍에게 한 번에 잡히는 칸들이며, 따라서 체스 말을 놓을 수 있는 빈칸 개수는 42개입니다.                                                                                                                                                                                                                                                           

// 다음과 같이 import를 사용할 수 있습니다.
import java.time.Year;
import java.util.*;

class Solution {
    public int solution(String[] bishops) {
        // 여기에 코드를 작성해주세요.
        int answer = 0;
        int[] dx = {1, -1, -1, 1};
        int[] dy = {1, 1, -1, -1};
        int[][] array = new int [9][9];
        for(int i=0; i<bishops.length; i++){
            int x=0, y=0;
            x = (int)bishops[i].charAt(0)-64;
            y = Integer.valueOf((int)bishops[i].charAt(1))-48;
            for(int j=0; j<4; j++){
                int nx=x, ny=y;
                while(true){
                    ny += dy[j];
                    nx += dx[j];
                    if(ny>8 || ny<1 || nx>8 || nx<1) break;
                    array[ny][nx]=1;
                }
            }
        }
        for(int i=1; i<9; i++){
            for(int j=1; j<9; j++){
                if(array[i][j]==0) answer++;
            } 
        }
        return answer-1;
    }

    // 아래는 테스트케이스 출력을 해보기 위한 main 메소드입니다.
    public static void main(String[] args) {
        Solution sol = new Solution();
        String[] bishops1 = {new String("D5")}; 
        int ret1 = sol.solution(bishops1);
        
        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        System.out.println("solution 메소드의 반환 값은 " + ret1 + " 입니다.");

        String[] bishops2 = {new String("D5"), new String("E8"), new String("G2")};
        int ret2 = sol.solution(bishops2);
        
        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        System.out.println("solution 메소드의 반환 값은 " + ret2 + " 입니다.");
    }
}

                                                                                                                                                                                                                                                             

        // 여기에 코드를 작성해주세요.
        int answer = 0;
        int[] dx = {1, -1, -1, 1};
        int[] dy = {1, 1, -1, -1};
        int[][] array = new int [9][9];
        for(int i=0; i<bishops.length; i++){
            int x=0, y=0;
            x = (int)bishops[i].charAt(0)-64;
            y = Integer.valueOf((int)bishops[i].charAt(1))-48;
            for(int j=0; j<4; j++){
                int nx=x, ny=y;
                while(true){
                    ny += dy[j];
                    nx += dx[j];
                    if(ny>8 || ny<1 || nx>8 || nx<1) break;
                    array[ny][nx]=1;
                }
            }
        }
        for(int i=1; i<9; i++){
            for(int j=1; j<9; j++){
                if(array[i][j]==0) answer++;
            } 
        }
        return answer-1;
 x = (int)bishops[i].charAt(0)-64;
y = Integer.valueOf((int)bishops[i].charAt(1))-48;                                                                                                             
for(int j=0; j<4; j++){
    int nx=x, ny=y;
    while(true){
        ny += dy[j];
        nx += dx[j];
        if(ny>8 || ny<1 || nx>8 || nx<1) break;
        array[ny][nx]=1;
    }
}

 

'코딩테스트 > JAVA' 카테고리의 다른 글

깊이우선탐색 DFS  (0) 2022.06.14
CosPro JAVA 1급 기출 3회 문제2  (0) 2022.06.13
CosPro JAVA 1급 기출 3회 문제1  (0) 2022.06.13
CosPro JAVA 1급 기출 2회 문제10  (0) 2022.06.13
CosPro JAVA 1급 기출 2회 문제9  (0) 2022.06.13