Algorithm/Simulation

[Python] 왕실의 나이트

코딩쪼앙 2023. 1. 17. 14:10

문제

  • 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)

'Algorithm > Simulation' 카테고리의 다른 글

[Python] 뱀  (0) 2023.01.25
[Python] 프로그래머스 '자물쇠와 열쇠'  (2) 2023.01.20
[Python] 게임 개발  (0) 2023.01.17
[Python] 시각  (0) 2023.01.16
[Python] 상하좌우  (0) 2023.01.10