Star_project
CosPro JAVA 1급 기출 3회 문제3 - 체스에서 비숍(Bishop) 말을 놓을 수 있는 빈칸의 개수 본문
#문제3
체스에서 비숍(Bishop)은 아래 그림과 같이 대각선 방향으로 몇 칸이든 한 번에 이동할 수 있습니다. 만약, 한 번에 이동 가능한 칸에 체스 말이 놓여있다면 그 체스 말을 잡을 수 있습니다.
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
그림과 같이 원이 그려진 칸은 비숍에게 한 번에 잡히는 칸들이며, 따라서 체스 말을 놓을 수 있는 빈칸 개수는 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 |