백준 알고리즘 2210

은영·2024년 3월 6일
0

백준 알고리즘 공부

목록 보기
22/26

숫자판에 있는 숫자를 총 다섯 번 이동하여 총 숫자 6자리 만드는 것. 대신 지나온 숫자는 다 지나갈 수 있다고 할 때 깊이 우선 탐색을 이용해 코드를 짜보았다.

코드

nmap = [list(map(str, input().split())) for _ in range(5)]

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

  # 상하좌우 이동 방향 정의
  directions = [(0, 1), (0, -1), (1, 0), (-1, 0)]

  for dr, dc in directions:
    new_row, new_col = x + dr, y + dc
    if 0 <= new_row < 5 and 0 <= new_col < 5:
      dfs(new_row, new_col, path + nmap[new_row][new_col])
      
  result = []
for i in range(5):
  for j in range(5):
    dfs(i,j,nmap[i][j])

print(len(result))

위 코드에서 신경써야 하는 부분은

숫자판을 문자열로 받아야한다는 점과
지나간 길을 path 인자로 받아 하나씩 문자열을 추가해 6자리 수가 만들어지면 함수 밖의 result에 추가해야 한다는 점이다.

이 부분을 생각 못 하고 계속 함수 안에서 nmap[new_row][new_col] 으로 path.append()를 하고 함수 밖에 result에 저장할 생각을 못 해서 이상하게 됐었다.

하지만 다른 분의 블로그 게시물을 참고해서 코드를 수정해 문제 해결

참고 블로그: https://claude-u.tistory.com/433

0개의 댓글

관련 채용 정보