구현 : 왕실의 나이트 [ 이것이 코딩테스트다 ] [ Python ]

2023. 5. 18. 23:16알고리즘/이것이 코딩테스트다

코드

location = input()

row = str(location[0])
column = int(location[1])

alpha = ["a", "b", "c", "d", "e", "f", "g", "h"]

find_alpha = int(alpha.index(row)) + 1 # row 를 숫자로 변환

night = [find_alpha, column] # 나이트의 위치를 저장

array = [
    [-1, -2], # "upleft"
    [1, -2], # "upright"
    [-2, -1], # "leftup"
    [-1, 1], # "leftdown"
    [-1, 2], # "downleft"
    [1, 2], # "downright"
    [2, -1], # "rightup"
    [2, 1] # "rightdown"
]

count = 0

for i in array:
    nx = night[0] + i[0]
    ny = night[1] + i[1]
    if 0 < nx <= 8 and 0 < ny <= 8:
        count += 1
print(count)

문제 해설

우선 사용자 입력값 a1 을 따로 저장해주고 a를 index와 만들어놓은 배열을 사용해서 숫자로 바꿔서 계산하기 편하게함

배열에 나이트가 움직일수있는 경우의 수를 모두 담아주고 반복문을 활용하여 모든 경우의 수를 실행하게 하고 조건에 맞을때마다 경우의 수를 증가시킨다

 

저자 코드

# 현재 나이트의 위치 입력받기
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)

회고

이 문제에 시간제한이 20분인데 나이트가 움직일 수 있는 방향을 계산하는데 시간을 모두 소비해 시간을 맞추지 못한 문제였다.

구현 문제에 익숙해 질 필요가 있다.