본문 바로가기
2023-4/1일1코딩

[이코테] 왕실의 나이트

by 이망고_ 2023. 1. 18.

구현 문제

상하좌우 모두 확인하는 브루트포스 유형인데, 한칸씩 이동이 아니라 허용될 수 있는 이동범위가 존재한다.

1. 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기

2. 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기 

 

* 행은 1~8 숫자로 표현되고,

  열은 a~h 영문자로 표현이 되어, ord 를 사용하여 수로 바꿔주는 것이 포인트

input_data = input()
row = int(input_data[1]) # 1
column = int(ord(input_data[0])) - int(ord('a')) + 1
print(row, column)

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]
    print('------',step[0], step[1])

    if next_row>=1 and next_row<=8 and next_column >=1 and next_column<=8:
        result += 1
print(result)

 

행에는 인풋데이터의 두번째 위치것을 저장, 열에는 첫번째 인덱스를 저장하고, 거리차이를 구하기 위해서 'a' 숫자를 빼준 후에 1을 더해준다. * 

 

이동 범위의 경우, 저런 식으로 8가지의 방향이 존재하게 되고 이를 1과 2, 양수와 음수를 대입함으로써 방향을 설정한다.

 

위의 이동범위를 도는 것을 출력해보면, 이런 식으로 나타날 수 있다.

이 범위들이 if 문에 조건에 해당이 되어 범위 안에 속해 있다면, 가능한 거리result +1 를 해주면 된다.

 

a1 의 경우, 2가지의 이동할 수 있는 방법이 존재한다. 

 

'2023-4 > 1일1코딩' 카테고리의 다른 글

[이코테] 숫자 카드 게임  (0) 2023.01.18
[BOJ] 1764 python  (0) 2023.01.11
[BOJ] 2667 python  (0) 2023.01.08
[BOJ] 1260 python  (0) 2023.01.06