알고리즘 문제풀이/파이썬

[이코테-구현] 실전 - 왕실의 나이트

Ella_K 2022. 6. 17. 16:29

[문제]

이것이 취업을 위한 코딩 테스트다 with 파이썬  P 115에 실전 2 왕실의 나이트

 


 

[입력 조건]

  • 첫째 줄에 8×8 좌표 평면상에서 현재 나이트가 위치한 곳의 좌표를 나타내는 두 문자로 구성된 문자열이 입력된다. 입력 문자는 a1처럼 열과 행으로 이뤄진다.

[출력 조건]

  • 첫째 줄에 나이트가 이동할 수 있는 경우의 수를 출력하시오.
<입력 예시>
a1

<출력 예시>
2

 


 

[책 풀이]

🔎 아이디어

  • 규칙에 따른 나이트의 이동 경로를 리스트에 저장한다.
move_type = [(-1,-2), (-1,2), (1,-2), (1,2), (-2,-1), (-2,1), (2,-1), (2,1)]
규칙에 따른 이동 경로는 총 8가지이고,
튜플의 첫번째 원소는 행, 두번째 원소는 열의 이동 경로를 뜻한다.
  • 나이트가 move_type 에 따라 이동했을 때, 8×8 좌표 평면을 벗어나는지 확인한다. 벗어나지 않으면 이동 횟수로 count하고, 벗어나면 count 하지 않는다.

 

🔎 코드

point = input()
row = int(point[1])
col = int(ord(point[0]))-int(ord('a'))+1 # int(ord('a')) = 97

move_type = [(-1,-2), (-1,2), (1,-2), (1,2), (-2,-1), (-2,1), (2,-1), (2,1)]

result = 0

for step in move_type:
  nx_row = row + step[0]
  nx_col = col + step[1]
  
  if nx_row < 1 or nx_row > 8 or nx_col < 1 or nx_col > 8:
    continue
  else:
    result+=1
  # or if nx_row >=1 or nx_row <= 8 or nx_col <=1 or nx_col >= 8 : result+=1

print(result)

 


출처: 이것이 취업을 위한 코딩 테스트다 with 파이썬