문제)
8 x 8의 체스판에서 나이트가 놓여져 있다. 나이트는 L자 형태로만 이동할 수 있으며 체스판 밖을 벗어날 수 없다. 나이트는 특정한 위치에서 다음과 같은 2가지 경우로 이동할 수 있다.
1. 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기
2. 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기
이와 같이 8 x 8 좌표 평면상에서 나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램을 작성하시오. 이 때 체스판에서 행 위치를 표현할 때는 1 ~ 8로 표현, 열 위치를 표현할 때는 a ~ h로 표현한다.
입력 조건)
첫째 줄에 8 x 8 좌표 평면상에서 현재 나이트가 위치한 곳의 좌표를 나타내는 두 문자로 구성된 문자열이 입력된다. 입력 문자는 a1처럼 열과 행으로 이뤄진다.
출력 조건)
첫째 줄에 나이트가 이동할 수 있는 경우의 수를 출력하시오.
입력 예시)
a1
출력 예시)
2
예제 4.1의 상하좌우 문제와 매우 유사하다. 예제 4.1의 문제에서는 방향에 따라 좌표가 넘어가지 않는 범위의 조건을 추가해주고 직접 인덱스를 조절해 주었다. 그러나 이번에는 나이트가 움직일 수 있는 경우의 수가 최대 8가지 이므로 이를 리스트화 시켜주었다.
움직일 수 있는 방법을 (행, 열) 로 나타내면 아래와 같다.
- (-2, -1)
- (-2, +1)
- (-1, +2)
- (+1, +2)
- (+2, -1)
- (+2, +1)
- (-1, -2)
- (+1, -2)
이 모든 경우의 수를 행과 열을 나누어서 리스트 2개 (dir_row와 dir_col) 으로 나누어주었고 반복문 8번 돌면서 주어진 위치에서 체스판을 벗어나지 않는 범위에서 가능한 움직임의 경우의 수를 모두 구하였다. 이 때 현재 행과 열에 dir_row, dir_col 내의 요소를 더해서 체스판 범위 내인지를 판단하는 방식으로 경우의 수를 구하였다.
소스코드
'Algorithm' 카테고리의 다른 글
자료구조 (Data Structure) (1) - 탐색과 자료구조란? (0) | 2023.07.29 |
---|---|
구현 (Implementation) (3) - 실전문제 4.3) 게임 개발 (0) | 2023.07.29 |
구현 (Implementation) (1) - 코딩테스트에서 구현이란? / 예제 4.1) 상하좌우, 예제 4.2) 시각 (0) | 2023.07.28 |
그리디 (Greedy) (4) - 실전문제 3.4) 1이 될 때까지 (0) | 2023.07.22 |
그리디 (Greedy) (3) - 실전문제 3.3) 숫자 카드 게임 (0) | 2023.07.22 |