왕실의 나이트
문제 상황
: 8x8 좌표 평면 공간
특정한 한 칸에 나이트가 서 있다.
나이트가 이동할 때는 L자 형태로만 이동 가능
이동 가능한 2가지 경우
1. 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기
2. 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기
행 위치 : 1~8
열 위치 : a~h
Input : str (str[0] : 열, str[1] : 행)
Output : int (나이트가 이동한 총 횟수)
input = input()
row = int(input[1])
column = ord(input[0]) - 96
count = 0
steps = [(-2,1), (-2,-1), (2,1), (2,-1), (1,2), (1,-2), (-1,2), (-1,-2)]
for dx,dy in steps:
if row+dx > 0 and row+dx <= 8:
if column+dy > 0 and column+dy <= 8:
count += 1
print(count)
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)
우선, input value의 column 값을 아스키값으로 바꾸는 생각이 좀 어려웠다.
아스키 코드를 평소 잘 사용하지 않아서 그런지, 오랜만에 봤다.
ord() 함수 : 문자열 -> 아스키값
(python category에 정리함)
그리고 steps 리스트 만드는 것도 좀 오래걸렸다.
모든 경우의 튜플 리스트를 만드는게 아니라 상하좌우 문제처럼 묶어서(?) 쓸 수 있는 리스트를 짜려고 생각하다보니 오히려 꼬인 것 같다.
여기 코드에서 steps가 '상하좌우'문제에서의 dx,dy 변수의 기능을 대신하여 수행
⭐️ 2가지 형태 모두 자주 사용되므로 알아두기