#넴모넴모(easy) , backtraking

N, M = map(int, input().split())

arr=[ [0 for _ in range(M+1)] for _ in range(N+1) ]
ans=0
def DFS(index_x,index_y):
    global ans
    
    if index_x==N and index_y == M+1 :
        ans+=1
        return
    
    
    if index_y ==M+1:
        index_x+=1
        index_y=1
    
    DFS(index_x, index_y+1)
    
    if arr[index_x -1][index_y]==0 or arr[index_x][index_y-1]==0 or arr[index_x-1][index_y-1]==0:
        arr[index_x][index_y]=1
        DFS(index_x, index_y+1)    
        arr[index_x][index_y]=0
    
DFS(1,1)
print(ans)

“넴모”는 인접한 4칸 중 최대 3칸에만 위치할 수 있다.

1,1에서 윗쪽,왼쪽, 대각선 왼쪽 방향을 체크할 수 있도록 해야한다. 이를 위해 격자판을 나타내는 arr 배열의 가로와 세로에 빈 줄을 하나씩 추가했다.

인접한 3방향에 모두 넴모가 있는 경우를 제외하고 넴모를 배치해가며 백트래킹을 통해 문제를 푼다. 가로 한 줄을 모두 확인하면 y 인덱스에 1을 추가하여 다음 가로로 넘어간다.

격자판 있을 때 index_x, index_y 나눠서 더하지 않고 하나의 변수 index로 통합한 풀이를 발견했다. 행의 마지막 칸에서 다음 행으로 넘어가는 과정 없이 하나의 index에 더해서 행의 개수로 나눈 몫은 x좌표 나머지는 y좌표로 이용할 수 있다.

댓글남기기