-문제: https://www.acmicpc.net/problem/2210

 

쉬운 문제였는데 잘 안풀렸던 문제. 재귀를 돌려야해서 동작 예측을 하는게 어려웠던 것 같다. 

문제 풀 때 고민했던 건 1. 지나갈 때 만나는 숫자는 어디에 입력하는 것이고 2. 딱 5번만 이동은 어떻게 하는지 

 

-정답풀이: 

2번의 해답은 문자 길이가 6이고, result안에 없는 문자라면 result에 삽입하고 return을 한다 

def dfs(x,y,num):
    if len(num)==6:
        if not num in result:
            result.append(num)
        return

 

1번의 해답은 위치를 알려주는 x,y 말고 num이라는 파라미터를 더 추가해서 이 숫자에 저장하면서 진행하면된다. 

한칸씩 진행할 때마다 num에는 숫자가 쌓일 것이고, 이 길이가 6이 된다면 result에 넣고 끝난다 

def dfs(x,y,num):
    if len(num)==6:
        if not num in result:
            result.append(num)
        return  

    for i in range(4):
        nx,ny=x+dx[i],y+dy[i]
        if 0<=nx<5 and 0<=ny<5:
            ans= num+s[nx][ny]
            dfs(nx,ny,ans)
            
s=[list(input().split()) for _ in range(5)]
result=[]
dx=[-1,1,0,0]
dy=[0,0,-1,1]

for i in range(5):
    for j in range(5):
        dfs(i,j,s[i][j])
        
print(len(result))

'백준 > Search' 카테고리의 다른 글

[백준/dfs] 1068번: 트리  (0) 2022.02.28
[백준/dfs] 9466번: 텀 프로젝트  (0) 2022.02.28
[백준/bfs] 1167번: 트리의 지름(다시)  (0) 2022.02.25
[백준/dfs] 1967번: 트리의 지름  (0) 2022.02.25
[백준/bfs] 2573번: 빙산  (0) 2022.02.24

+ Recent posts