행복 왕국의 왕실 정원은 체스판과 같은 8 × 8 좌표 평면이다. 왕실 정원의 특정한 한 칸에 나이트가 서있다. 나이트는 매우 충성스러운 신하로서 매일 무술을 연마한다 나이트는 말을 타고 있기 때문에 이동을 할 때는 L자 형태로만 이동할 수 있으며 정원 밖으로는 나갈 수 없다 나이트는 특정 위치에서 다음과 같은 2가지 경우로 이동할 수 있다
이처럼 8 × 8 좌표 평면상에서 나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램을 작성하라. 왕실의 정원에서 행 위치를 표현할 때는 1부터 8로 표현하며, 열 위치를 표현할 때는 a 부터 h로 표현한다
input_data=input()
move=[[2,1],[2,-1],[-2,1],[-2,-1],[1,2],[1,-2],[-1,2],[-1,2]]
col=['a','b','c','d','e','f','g','h']
raw=[1,2,3,4,5,6,7,8]
count=0
for c in range(len(col)):
for r in range(len(raw)):
if col[c]+str(raw[r]) == input_data:
location=[c+1,r]
for i in move:
if [location[0]+i[0],location[1]+i[1]]<=[8,8] and [location[0]+i[0],location[1]+i[1]]>=[1,1]:
count+=1
else:
continue
print(count)
30분 넘게 끙끙대며 풀어봤지만 결과는 처참히 실패..
input_data=input()
row=int(input_data[1])
col=int(ord(input_data[0]))-int(ord('a'))+1
steps=[(2,1),(2,-1),(-2,1),(-2,-1),(1,2),(1,-2),(-1,2),(-1,2)]
result=0
for step in steps:
next_row=row+step[0]
next_col=col+step[1]
if next_row>=1 and next_row<=8 and next_col>=1 and next_col<=8:
result+=1
print(result)
나는 a-h를 숫자로 받을때 리스트와 for문으로 일일이 받으려 했으나 답안에서는 아스키 코드로 반환하는 ord함수를 이용하여 손쉽게 구했다.
이것이 취업을 위한 코딩 테스트다 with 파이썬 - 나동빈 저