Home 왕실의 나이트 이동 시뮬레이션
Post
Cancel

왕실의 나이트 이동 시뮬레이션

체스판은 8x8로 이루어져 있습니다. 임의의 위치에 나이트를 놓았을때 이동할 수 있는 횟수는 몇가지가 될까요?

일단 최대 8개이지만 놓인 위치에 따라서 달라지겠지요

여기서 좌표를 단순히 숫자,숫자가 아니라 문자,숫자라고 가정해보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
input_data = input()
row = int(input_data[1])
column = int(ord(input_data[0]))-int(ord('a'))+1

#나이트가 이동할 수 있는 8가지 방향을 정의
steps = [(-2,-1),(-1,-2),(1,-2),(2,-1),(2,1),(1,2),(-1,2),(-2,1)]

#8가지 방향에 대하여 각 위치로 이동이 가능한지 확인
result = 0
for step in steps:
    #이동하고자 하는 위치 확인
    next_row = row + step[0]
    next_column = column + step[1]
    #해당 위치로 이동이 가능하다면 카운트 증가
    if next_row >= 1 and next_row <= 8 and next_column>=1 and next_column <=8:
        result +=1
        
print(result)

일단 가장먼저 data를 입력받습니다. row는 처음부터 숫자이니 그대로 받으면 되지만 column열은 좀 달리할 필요가 있습니다. a를 입력받으면 이 수는 첫번째 수입니다. 즉 1로 처리하는게 편하겠지요

파이썬 아스키코드 변환 함수 ord와 chr

ord를 이용해서 아스키코드 값을 반환합니다. 만약 a라고 가정하면 97이 나올 것이고, 여기에다가 a의 아스키코드값을 빼주면 0이 됩니다. 여기서 1을 더하면 1부터 시작하는 것을 알 수 있습니다. b는 2가 되겠지요

그리고 이동할 수 있는 경우의수 8가지를 입력을 하고

각 스텝 8개를 돌려보면서 가능한 것을 확인을 하고 결과값을 반환을 하면 마무리 됩니다.

result img

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.