킹경후 2023. 1. 31. 17:12

문제 설명

  • 체스판은 8x8 크기이며, 나이트는 L자 형태로만 이동 가능.
  • 수직으로 2칸 이동 후 수평으로 1칸 이동 또는 수평으로 2칸 이동 후 수직으로 1칸 이동
  • 행 위치는 1부터 8, 열 위치는 a부터 h까지로 나타냄
  • 이때 나이트가 이동할 수 있는 경우의 수를 계산

문제 조건

  • 첫째줄에 8x8 좌표 평면상에서 현재 나이트가 위치한 곳의 좌표를 나타내는 두 문자로 구성된 열이 입력된디

입력 예시

  • a1
  • 출력 : 2

평행 이동이 아니라 그 좌우로 또는 상하로 2칸 움직인 후 다시 상하 또는 좌우로 1칸 움직이는 방식이었다.

  • 아이디어 : 여타 이동 문제와 비슷하게, 이동한 후의 좌표가 체스판 밖으로 넘어간다면 이동하지 않고, 체스판 안쪽이라면 이동
  • 상하 이동과 좌우 이동이 반드시 함께 하기 때문에 2차원 배열을 생성

나의 답안

let answer = 0
let input = prompt()
let move = [[2,1], [2,-1], [-2,1], [-2,-1], [1,2], [1,-2], [-1,2], [-1,-2]]
//x,y의 이동량을 배열 형태로 move에 저장.
let [x, y] = input.split("")
x = x.charCodeAt() - 96
y = Number(y)
//x와 y를 각각 숫자로 바꿔줌
for(let i = 0; i < move.length; i++){
    if(x + move[i][0] > 8 || x + move[i][0] < 1 || y + move[i][1] > 8 || y + move[i][1] < 1){
        continue
        //만약 이동 후의 좌표가 체스판을 벗어나면 continue
    } else{
        answer++
        //이동 후의 좌표가 체스판 안에 있으면 answer에 1을 더함
    }
}

실행 결과