문제
- 8 x 8 좌표평면에서 나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램을 작성하시오
- 이 때 왕실의 정원에서 행 위치를 표현할 때는 1부터 8로 표현하며, 열 위치를 표현할 때는 a부터 h로 표현한다
- 나이트는 이동할 때 L자 형태로만 이동할 수 있으며 다음과 같은 2가지 경우로 이동할 수 있다
- 1. 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기
- 2. 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기
입력
- 첫째 줄에 8 x 8 좌표 평면상에서 현재 나이트가 위치한 곳의 좌표를 나타내는 두 문자로 구성된 문자 열이 입력된다 입력 문자는 a1처럼 열과 행으로 이뤄진다
출력
- 첫째 줄에 나이트가 이동할 수 있는 경우의 수를 출력하시오
문제 풀이
- 입력받은 후 행과 열을 분리하여 저장
- 좌표평면에서 벗어나지 않는 경우 이동할 수 있으므로 이동가능 횟수 세주기
- 이동가능 횟수 출력
코드
place = input()
# 위왼, 위오, 아래왼, 아래오, 왼위, 왼아, 오위, 오아
# dy = [-2, -2, 2, 2, -1, 1, -1, 1]
# dx = [-1, 1, -1, 1, -2, -2, 2, 2]
column = (ord(place[0]) - ord('a')) + 1
row = int(place[1])
count = 0
move = [(-2, -1), (-2, 1), (2, -1), (2, 1), (-1, -2), (1, -2), (-1, 2), (1, 2)]
for i, j in move:
new_column = column + j
new_row = row + i
if 1 <= new_row <= 8 and 1 <= new_column <= 8:
count += 1
print(count)
place = input()
# 위왼, 위오, 아래왼, 아래오, 왼위, 왼아, 오위, 오아
dy = [-2, -2, 2, 2, -1, 1, -1, 1]
dx = [-1, 1, -1, 1, -2, -2, 2, 2]
column = (ord(place[0]) - ord('a')) + 1
row = int(place[1])
count = 0
for i in range(8):
new_column = column + dx[i]
new_row = row + dy[i]
if 1 <= new_row <= 8 and 1 <= new_column <= 8:
count += 1
print(count)