min's devlog
[구현] 왕실의 나이트 본문
- 8 x 8 좌표 평면의 왕실 정원의 특정 한칸에 나이트가 서있다.
- 나이트의 이동은
- 나이트의 위치가 주어졌을 때 이동할 수 있는 경우의 수를 출력하는 프로그램을 작성하세요. 행 위치는 1부터 8로, 열 위치는 a부터 h로 표현합니다.
- 입력 조건 : 현재 나이트가 위치한 곳의 좌표를 나타내는 두 문자로 구성된 문자열. 예) a1
- 출력 조건 : 첫째줄에 나이트가 이동할 수 있는 경우의 수 출력
풀이 코드
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 현재 나이트의 위치 입력받기
String inputData = sc.nextLine();
int row = inputData.charAt(1) - '0';
int column = inputData.charAt(0) - 'a' + 1;
// 나이트가 이동할 수 있는 8가지 방향 정의
int[] dx = {-2, -1, 1, 2, 2, 1, -1, -2};
int[] dy = {-1, -2, -2, -1, 1, 2, 2, 1};
// 8가지 방향에 대하여 각 위치로 이동이 가능한지 확인
int result = 0;
for (int i = 0; i < 8; i++) {
// 이동하고자 하는 위치 확인
int nextRow = row + dx[i];
int nextColumn = column + dy[i];
// 해당 위치로 이동이 가능하다면(체스판을 벗어나지 않는다면) 카운트 증가
if (nextRow >= 1 && nextRow <= 8 && nextColumn >= 1 && nextColumn <= 8) {
result += 1;
}
}
System.out.println(result);
}
}
리스트를 이용해서, 이동할 수 있는 8가지 방향에 대한 방향 벡터를 정의한다. 그 후 나이트의 8가지 경로를 하나씩 확인하며 이동이 가능한지 확인한다.
- 주의
int row = inputData.charAt(1) - '0';
int column = inputData.charAt(0) - 'a' + 1;
문자 하나하나는 char형으로, int로 형변환시 아스키코드 값이 된다. 문자 '0'은 int형으로 형변환시 48이고 'a'는 97, 'A'는 65이다.
나이트의 위치는 문자열의 형태로 입력 받은 상태로, row와 coloum 은 아스키 코드 값을 빼주며 초기화한다.
특히 알파벳 아스키코드 값은 0부터 시작하는 숫자와는 다르게, a부터 시작하기 때문에 'a' 값을 빼준 후 1을 더해야한다.
문제 출처 : 나동빈님의 이것이 취업을 위한 코딩 테스트다
'til > Algorithm' 카테고리의 다른 글
[완전 탐색] 시각 문제 (0) | 2022.07.05 |
---|---|
5x5 마방진 (0) | 2022.04.07 |
회장 선거 (0) | 2021.07.31 |
[Two pointers] 연속된 자연수의 합 (0) | 2021.07.30 |
연속부분수열 (0) | 2021.07.30 |
Comments