소스 코드
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. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.
오류나 적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.
혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.
'코딩 문제해결 > 문제 풀이.SWEA' 카테고리의 다른 글
[SWEA 코딩] 콩 많이 심기 - PYTHON #4301 (0) | 2021.07.15 |
---|---|
[SWEA 코딩] 부분 수열의 합 - PYTHON #2817 (0) | 2021.07.14 |
[SWEA 코딩] 영준이의 카드 카운팅 - PYTHON #4047 (0) | 2021.06.30 |
[SWEA 코딩] 쇠막대기 자르기 - PYTHON #5432 (0) | 2021.06.28 |
[SWEA 코딩] 빠른 휴대전화 키패드 - PYTHON #4261 (0) | 2021.06.26 |