<이것이 취업을 위한 코딩 테스트다>를 공부하며 정리한 내용입니다.
이처럼 8x8 좌표 평면상에서 나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램을 작성하시오. 이때 왕실의 정원에서 행 위치를 표현할 때는 1부터 8로 표현하며, 열 위치를 표현할 때는 a부터 h로 표현한다.
a1
2
cr=input() #좌표 입력
ato1={'a':1,'b':2,'c':3,'d':4,'e':5,'f':6,'g':7,'h':8} #열 위치 숫자로 변환
r,c=int(cr[1]), ato1[cr[0]] #행, 열 위치 각자 정수로 표현
#행 열 방향으로 이동하는 8가지 조합들
dr=[2,2,-2,-2,1,1,-1,-1]
dc=[1,-1,1,-1,2,-2,2,-2]
cnt=0 #경우의 수
#8가지 조합 중 가능한 조합 찾기
for i in range(8):
nr=r+dr[i] #그 조합으로 이동해 본다
nc=c+dc[i]
if nr<1 or nr>8 or nc<1 or nc>8: #영역을 탈출하면
continue #카운트 x
cnt+=1 #이동가능하면 카운트
print(cnt) #경우의 수 출
cr=input()
r=int(cr[1])
c=ord(cr[0])-ord('a')+1 #ord 함수는 아스키 코드값을 반환해줌.
#나이트가 이동할 수 있는 8가지 방향 정의
steps=[(-2,-1),(-1,-2),(1,-2),(2,-1),(2,1),(1,2),(-1,2),(-2,1)]
cnt=0
for step in steps:
nr=r+step[0]
nc=c+step[1]
if nr>=1 and nr<=8 and nc>=1 and nc<=8:
cnt+=1
print(cnt)
P.S 상하좌우 문제와 비슷한 풀이다. 먼저 움직일 수 있는 선택지를 정의하고, 그 선택지로 가면 어떻게 되는지를 계산하고 조건을 따져준다.