8. 구현 : 체스 나이트의 경우의 수

2021. 11. 14. 01:53파이썬/알고리즘

8 * 8 체스판 위에서 나이트가 움직일 수 있는 경우의 수

 

rule :

1. 체스판 밖으로 나갈 수 없다.

2. column은 a,b,c,d,e,f,g,h로 이루어져 있고 row는 1,2,3,4,5,6,7,8로 이루어져 있다.

3. 나이트는 수평으로 2칸 수직으로 1칸, 수직으로 2칸  수평으로 1칸 움직일 수 있다.

 

6 번으로 올렸던 상하좌우 움직이기와 같은 유형이다.

 

움직일 수 있는 경우의 수를 리스트로 만든 뒤, 임시 변수에 저장.

조건에 맞으면 실제 변수에 저장하는 방식으로 풀었다.

 

locate = input()

x = int(locate[1])
y = locate[0]

alphabet = ['a','b','c','d','e','f','g','h']

for i, alphabet in enumerate(alphabet):
  if y== alphabet:
    y = i+1



dx=[2,-2,1,1,2,-2,-1,-1]
dy=[1,1,2,-2,-1,-1,2,-2]
count = 0

for i in range(8):
  nx = dx[i] + x
  ny = dy[i] + y
  if nx < 1 or ny < 1 or nx > 8 or ny > 8:
    continue
  count += 1


print(count)

너무 비슷한 문제 아니야?? 라고 생각했는데, 그 생각이 맞았다.

dx 와 dy 리스트 만들 때 이게 맞나? 라고 생각했는데 그래도 맞췄다. 그래도 더욱 간결한 풀이를 해야겠다 ㅠ,,ㅠ

 

input_data = input()
x = int(input_data[1])
y = int(ord(input_data[0])) - int(ord('a')) + 1

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

result = 0

for step in steps :
  nx = x + step[0]
  ny = y + step[1]

  if nx <1 or ny <1 or nx >8 or nx >8:
    continue
  result += 1
print(result)

일단 아스키 코드로 숫자로 변환하는 과정이 굉장히 신박했다.

일단 a일 때 1이여야 하니 +1하는 것을 잊지말자.

그리고 튜플로 묶어서 이동할 수 있는 경우의 수를 만든 것도 굉장히 좋았다.

반응형

'파이썬 > 알고리즘' 카테고리의 다른 글

10. DFS/BFS : 문제 풀이 전략  (0) 2021.11.16
9. 구현 : 게임 개발  (0) 2021.11.15
7. 구현 : 시각  (0) 2021.11.14
6. 구현 : 상하좌우 움직이기  (0) 2021.11.13
5. 구현 : 문제 풀이 전략  (0) 2021.11.13