이것이 취업을 위한 코딩 테스트다. 구현 [왕실의 나이트]

GOSHK·2022년 1월 25일
0
post-custom-banner

이것이 취업을 위한 코딩 테스트다. with 파이썬 - 나동빈

나의 풀이

public class HorseOfWangsil {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String[] split = br.readLine().split("");
        int answer = 0;

        String[] columns = new String[]{"a", "b", "c", "d", "e", "f", "g", "h"};
        int[][] pos = new int[][]{{1, -2}, {-1, -2}, {-2, -1}, {-2, 1}, {-1, 2}, {1, 2}, {2, 1}, {2, -1}};

        int column = 1;
        for(int i = 0; i < columns.length; i++) {
            if(columns[i].equals(split[0])) {
                column = i + 1;
            }
        }

        int row = Integer.parseInt(split[1]);

        for(int i = 0; i < 8; i++) {
            int tempCol = column;
            int tempRow = row;

            tempRow += pos[i][0];
            tempCol += pos[i][1];

            if(tempRow < 1 || tempCol < 1 || tempRow > 8 || tempCol > 8) continue;

            answer++;
        }

        System.out.println(answer);
    }
}
String[] columns = new String[]{"a", "b", "c", "d", "e", "f", "g", "h"};
int[][] pos = new int[][]{{1, -2}, {-1, -2}, {-2, -1}, {-2, 1}, {-1, 2}, {1, 2}, {2, 1}, {2, -1}};

int column = 1;
for(int i = 0; i < columns.length; i++) {
    if(columns[i].equals(split[0])) {
        column = i + 1;
    }
}

int row = Integer.parseInt(split[1]);
  • 알파벳 부분의 좌표를 얻기 위해 배열을 만든다.
  • 나이트도 마찬가지로 이동 좌표를 얻기 위해 배열로 만들어 주었다.
  • 입력을 받은 문자를 알파벳 부분과 숫자로 나눠 알파벳 부분은 반복문을 돌려준다. 반복문을 통해 해당 인덱스를 찾아 + 1을 해주고 column 변수에 담아준다. 숫자 부분은 그냥 파싱하여 row 변수에 담아준다.
for(int i = 0; i < 8; i++) {
    int tempCol = column;
    int tempRow = row;

    tempRow += pos[i][0];
    tempCol += pos[i][1];

    if(tempRow < 1 || tempCol < 1 || tempRow > 8 || tempCol > 8) continue;

    answer++;
}
  • 임시 행과 열 변수에 row 값과 column 값을 담아둔다.
  • 해당 임시 변수에 말의 이동 좌표들을 행과 열에 맞게 더해준다.
  • 만약 계산 과정에서 행과 열이 1보다 작거나 8보다 커진다면 스킵한다.
  • 아니라면 카운트를 세준다.

문제 해설 & 느낀점

column 변수의 값을 굳이 반복문을 돌리지 않고도 충분히 구할 수 있었다.

int column =(split[0].charAt(0) - 'a') + 1;

그리고 continue 를 사용하지 않고 그냥 해당 범위 내에 있을 경우에만 +1을 해주고 있다.

if(tempRow >= 1 && tempCol >= 1 && tempRow <= 8 && tempCOl <= 8) answer++;
post-custom-banner

0개의 댓글