왕실의 나이트 (구현)

‘풀이시간 20분 , 시간제한 1초, 메모리제한 128MB (취코테 with Python 115p 실전문제)’

이 문제를 풀때 아스키 코드를 이용하여 알파벳을 숫자로 치환하는 것을 생각 못했다. 그래서 알파벳을 순서대로 저장한 배열을 만들어 해당배열의 인덱스 값을 x값으로 둬서 숫자로 바꾸고 y는 두번째로 입력받은 값을 저장하도록 해결하였다.

하지만 ord()함수를 이용하여 아스키코드값을 이용해 a와의 차이만큼을 값을 이용하면 대응하는 숫자를 간단하게 구할 수 있다.
이런 경우마다 파이썬 내장 함수에 대해 더욱 잘 알아야겠다는 생각을 한다.
나이트가 이동하는 방향을 dx와 dy를 이용해 각각 대응되게 만들수도 있지만, 이동하는 좌표쌍을 튜플 리스트를 이용하여 저장하면 더욱 간편하다.
이동한 위치가 범위를 벗어나지 않았다면 result를 +1 하는 방식으로 해서 result값을 반환하면 된다.

⚡️아스키코드와 튜플을 이용한 간결한 방법⚡️

#현재 나이트의 위치 입력받기
input_data = input()
row = int(input_data[1])
column = int(ord(input_data[0]) - int(ord('a'))) + 1  ## ord() 함수는 문자의 아스키코드를 반환 이를 이용해 알파벳을 대응 순서의 숫자로 치환 가능, [1, 1]의 위치에서 시작하므로 1 더해줌. row는 입력값이 1부터라 더해줄 필요X


# 나이트가 이동할 수 있는 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)



내가 푼 방법🤦

s = input()
arr = "a b c d e f g h".split()
dx = [1, 1, 2, 2, -1, -1, -2,-2] #동2북1, 서2북1, 북2동1, 북2서1, 동2남1, 서2남1, 남2동1, 남2서1
dy = [2, -2, 1, -1, 2, -2, 1, -1]

for i in range(len(arr)):
  if(s[0] == arr[i]):
    idx = i
x = idx
y = int(s[1])

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

print(count)