알고리즘/SWEA
[SWEA] 2819. 격자판의 숫자 이어붙이기
빙빙
2021. 4. 16. 16:54
1. 일단 어느 곳에서 시작이 가능하기 때문에 이중for문을 사용하여 모든 원소에서 시작하게 했다.(함수)
2.함수에서 4방 탐색을 한다. 글자수는 7자이기 때문에 cnt가 8번이 되면 종료하는 것으로 짰다.
3.중복을 없애기 위해서 set()으로 받았다.
def move(x,y,cnt):
global num
if cnt == 8: #8번 돌아가면 종료
num.add("".join(temp)) # join에서 str로 받아달라해서 MAP원소들을 int형에서 str로 바꿈
return
#우
if y+1 < 4:
temp[cnt-1] = MAP[x][y+1]
move(x,y+1,cnt+1)
#하
if x+1 < 4:
temp[cnt-1] = MAP[x+1][y]
move(x+1,y,cnt+1)
#상
if x-1 >= 0:
temp[cnt-1] = MAP[x-1][y]
move(x-1,y,cnt+1)
#좌
if y-1 >= 0:
temp[cnt-1] = MAP[x][y - 1]
move(x,y-1,cnt+1)
T = int(input())
for tc in range(1,T+1):
MAP = [list(input().split()) for _ in range(4)]
# 모든 좌표에서 시작
num = set()
temp = ['','','','','','','']
for i in range(4):
for j in range(4):
move(i,j,1)
print("#{} {}".format(tc, len(num)))