-
해당 문제는 처음에 배열을 생성하여 킹의 위치는 데이터를 1로 스톤은 2로 두어서 해결하려다 더 쉽게 할 수 있는 방법이 있어 보여 해당 방법으로 진행하여 해결했다.
https://www.acmicpc.net/problem/1063
1063번: 킹
8*8크기의 체스판에 왕이 하나 있다. 킹의 현재 위치가 주어진다. 체스판에서 말의 위치는 다음과 같이 주어진다. 알파벳 하나와 숫자 하나로 이루어져 있는데, 알파벳은 열을 상징하고, 숫자는
www.acmicpc.net
https://github.com/JUNGSOONIL/JAVA/blob/main/BAEKJOON%201063
GitHub - JUNGSOONIL/JAVA: JAVA 소스 코드
JAVA 소스 코드. Contribute to JUNGSOONIL/JAVA development by creating an account on GitHub.
github.com
해당 문제는 8*8체스판 위에 킹과 돌의 위치가 주어지고 사용자가 원하는 대로 킹을 움직여서 최종적으로 킹과 돌의 위치를 출력해 주어야 하는 문제이다
조건
체스판은 왼쪽 아래가 A1을 시작으로 열은 알파벳으로 행은 숫자로 구분한다.
킹은 오른쪽 왼쪽 위아래 오른쪽 대각선 위아래 왼쪽 대각선 위아래로 이동 가능하다.
킹이 돌이 있는 위치로 이동하게 되면 킹의 이동방향으로 돌도 이동해 주어야 한다.
킹과 돌이 체크 판 밖으로 넘어갈 경우 해당 이동은 무시하고 다음 이동을 실시한다.
먼저 해당 문제 조건대로 체스판을 구성하고 해당 체스판 데이터를 배열의 좌표로 변환해 주었다.
이때 조건의 체스판 번호와 배열 좌표를 비교해 보면 A8의 경우 A는 0으로 바꿔주고 8은 -8을 해주면 배열 좌표로 변환이 가능하다.
하지만 A7의 경우 A는 0으로 바꿔주고 7은 -8을 해준 뒤 -1을 곱하여주고 앞뒤 데이터 위치를 변경해 주어야 한다
A의 경우 먼저 A를 아스키코드로 바꾸어준 뒤 -65를 해주고 해당 데이터를 int형으로 형변환을 해주면 된다.
(int) (A.charAt(0)) - 65;
7의 경우 -8을 해주고 -1을 곱해준 뒤 int형으로 형 변환을 해주면 된다.
(Integer.parseInt(7) - 8) * -1;
이후 변경한 킹과 돌의 위치를 a, b, c, d에 각각 저장하여 준 뒤 이동에 따라 + -를 해주면 최종적인 위치를 파악할 수 있다.
결국 이동 위치는 위의 그림을 토대로 계산이 가능하며 이때 우리는 이동하려는 방향에 돌이 위치하는지 또는 이동하려는 곳이 체스판의 밖이 아닌지만 if 문으로 걸러주게 되면 쉽게 계산이 가능하다.
이후 계산을 다 끝냈다면 a, b, c, d 데이터를 원래의 체스판 번호로 바꾸어 주고 순서를 바꾸어 저장하였기 때문에 출력 부분에서 ba dc 순으로 출력하여 문제를 해결할 수 있다.
728x90'알고리즘 > Baekjoon' 카테고리의 다른 글
Baekjoon 1094 막대기 JAVA (0) 2021.11.04 Baekjoon 1018 체스판 다시 칠하기 JAVA (0) 2021.11.04 Baekjoon 1059 수2 JAVA (0) 2021.11.04 Baekjoon 10866 덱 JAVA (0) 2021.11.04 Baekjoon 2579 계단 오르기 JAVA (0) 2021.11.04 댓글