반응형
체스 좌표를 입력하면 나이트가 이동할 수 있는 경우의 수를 결과로 보여주는 코드부터 보실게요.
# Prompt user for input and validate it
while True:
input_data = input()
if len(input_data) == 2 and input_data[1].isdigit() and input_data[0].isalpha() and 'a' <= input_data[0] <= 'h':
break
print('keep typing')
# Convert input to row and column coordinates on chessboard
row = int(input_data[1])
column = ord(input_data[0]) - ord('a') + 1
# Define list of steps a knight can make on the chessboard
steps = [(-2,-1),(-2,1),(-1,-2),(-1,2),(1,-2),(1,2),(2,-1),(2,1)]
# Count number of valid steps
result = 0
for step in steps:
next_row = row + step[0]
next_column = column + step[1]
if 1 <= next_row <= 8 and 1 <= next_column <= 8:
result += 1
# Print result
print(result)
- 먼저 사용자로부터 알파벳과 숫자로 이루어진 두 글자를 입력받습니다. 이 때, 첫 글자는 알파벳 a부터 h 중 하나이어야 하고, 두 번째 글자는 1부터 8 중 하나의 숫자여야 합니다.
- 입력받은 값을 좌표로 변환합니다. 첫 글자는 알파벳 a부터 h 중 하나이므로 아스키 코드 값을 이용해 1부터 8까지의 숫자로 변환하고, 두 번째 글자는 그대로 숫자로 변환합니다.
- 나이트가 이동할 수 있는 경우의 수를 리스트로 정의합니다.
- 이동할 수 있는 위치가 체스판 안에 있는지 확인하고, 있다면 결과 값에 1을 더합니다.
- 결과 값을 출력합니다.
코드를 자세히 분석해보겠습니다.
while True:
input_data = input()
if len(input_data) == 2 and input_data[1].isdigit() and input_data[0].isalpha() and 'a' <= input_data[0] <= 'h':
break
print('keep typing')
먼저 while 반복문을 사용하여, 사용자로부터 알파벳과 숫자로 이루어진 두 글자를 입력받습니다. 그리고 if 문을 사용하여 입력값이 2글자이고, 첫 번째 글자가 알파벳이며 a부터 h 중 하나이고, 두 번째 글자가 1부터 8 중 하나의 숫자인 경우에 반복문을 빠져나오도록 합니다. 그렇지 않으면 'keep typing'을 출력합니다.
row = int(input_data[1])
column = ord(input_data[0]) - ord('a') + 1
입력값으로부터 행과 열 값을 추출하여 변수 row와 column에 저장합니다. 첫 번째 글자는 알파벳이므로 아스키 코드 값으로 변환한 뒤, 'a'의 아스키 코드 값을 빼서 1부터 8까지의 숫자로 변환합니다. 두 번째 글자는 그대로 정수형으로 변환합니다.
steps = [(-2,-1),(-2,1),(-1,-2),(-1,2),(1,-2),(1,2),(2,-1),(2,1)]
체스 나이트가 이동할 수 있는 경우의 수를 리스트로 정의합니다. 각 튜플은 (세로 이동 거리, 가로 이동 거리)로 구성되어 있습니다.
result = 0
for step in steps:
next_row = row + step[0]
next_column = column + step[1]
if 1 <= next_row <= 8 and 1 <= next_column <= 8:
result += 1
나이트가 이동할 수 있는 위치를 하나씩 확인하며, 체스판 내에 있으면 결과 값 result에 1을 더합니다.
예를 들어 'b4'을 입력해보겠습니다.
아래와 같이 이동 가능한 위치는 6가지가 있으며 출력 결과는 '6'을 표시합니다.
- a2
- a6
- c2
- c6
- d3
- d5
반응형
'코딩 > Python' 카테고리의 다른 글
[python] 2중 리스트 기초 사용법 (2) | 2023.04.09 |
---|---|
[python] strip().split() 사용하여 데이터 전처리 하는법 (0) | 2023.04.09 |
[python] 정규식 compile로 웹크롤링 데이터 불러오기 (0) | 2023.04.06 |