구현 문제
상하좌우 모두 확인하는 브루트포스 유형인데, 한칸씩 이동이 아니라 허용될 수 있는 이동범위가 존재한다.
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 |