왕실의 나이트

ChoiDevv·2023년 1월 9일
0

풀이

coordinate = input()
coordinate_list = ["a", "b", "c", "d", "e", "f", "g", "h"]
x, y = coordinate_list.index(coordinate[0]), int(coordinate[1]) - 1
answer = 0

# 우, 좌, 상, 하
dx = [2, 2, 1, 1, -2, -2, -1, -1]
dy = [1, -1, 2, -2, 1, -1, 2, -2]

for i in range(8):
    mx = x + dx[i]
    my = y + dy[i]

    if mx < 0 or my < 0 or mx >= 8 or my >= 8:
        continue
    else:
        answer += 1

print(answer)

의도

처음에 해결했던 상하좌우 문제처럼 접근했다. 다만 상하좌우는 지속해서 값이 변경되고 이 경우는 하나의 x, y 좌표에서 완전 탐색으로 대입했다. 테스트 케이스는 대부분 성공하고 있는 것 같긴한데 뭐가 에러일진 모르겠다.

다른 풀이

input_data = input()
row = int(input_data[1])
column = 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:
    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)

내가 할 때는 8이라고 단순히 정했는데 이는 나이트가 움직일 수 있는 최대 거리를 의미했다. 생각해보니 모든 스텝들을 정의해서 반복문으로 더해주고 조건에 맞으면 1을 더해주는 로직도 정답이 될 수 있었다.

profile
기억보단 기록을

0개의 댓글