공부, 기록

2819. 격자판의 숫자 이어 붙이기 D4 파이썬 본문

코딩

2819. 격자판의 숫자 이어 붙이기 D4 파이썬

무는빼주세요 2020. 8. 23. 13:22

문제링크 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7I5fgqEogDFAXB&categoryId=AV7I5fgqEogDFAXB&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

def solution(N):
    answer=set()
    visited=list()
    #격자판 시작 위치
    for i in range(4):
        for j in range(4):
            num=""
            visited=list()
            visited.append((i,j,num))
            #dfs
            while visited:
                dx,dy,num = visited.pop()
                #조건 성립
                if len(num)==7:
                    answer.add(num)
                else:
                    for x in range(4):
                        if x == 0:
                            if dx+1<=3:
                                visited.append((dx+1,dy,num+N[dx+1][dy]))
                        elif x == 1:
                            if dx-1>=0:
                                visited.append((dx-1,dy,num+N[dx-1][dy]))
                        elif x == 2:
                            if dy+1<=3:
                                visited.append((dx,dy+1,num+N[dx][dy+1]))
                        elif x == 3:
                            if dy-1>=0:
                                visited.append((dx,dy-1,num+N[dx][dy-1]))
    return len(answer)

T = int(input())
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1, T + 1):
    N=[list(map(str,input().split())) for _ in range(4)]
    print("#"+str(test_case),solution(N))