소스 코드

def dfs(i,j,cnt,cur_word):
    global res

    # 6번 움직였으면
    if cnt == 6:
        
        # lst 안에 cur_word 값의 key가 없으면
        if lst.get(cur_word) == None:
            lst[cur_word] = cur_word
            res += 1

        return

    # 상 하 좌 우 이동
    for e in range(4):
        ii = i + x[e]
        jj = j + y[e]

        if 0 <= ii < 4 and 0 <= jj < 4:
            dfs(ii,jj,cnt+1,cur_word+str(board[ii][jj]))

    return

T = int(input())

# 상 하 좌 우
x = [0,0,-1,1]
y = [-1,1,0,0]

for tc in range(1,1+T):

    board = [list(map(int,input().split())) for _ in range(4)]

    # 만들어지는 값 저장하기 위한 빈 딕셔너리
    lst = dict()

    # 결과 값
    res = 0

    for q in range(4):
        for w in range(4):
            
            # x,y,이동 횟수,현재 단어
            dfs(q,w,0,str(board[q][w]))

    print('#{} {}'.format(tc,res))

 


해결 방법

1. 만들어진 값을 저장한 후에 확인하면서 카운트하는 방식으로 접근

 

2. 리스트를 만들고 if cur_word not in lst 조건을 주고 append로 추가(통과는 됨)하는 방법은 시간이 너무 오래걸릴 것이라 판단

 

3. 딕셔너리의 key를 활용해서 문제 해결(시간 절약 가능)


느낀 점

 

 

ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.

 

오류적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.

 

혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.