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 |