차곡차곡

[BOJ/Python] 백준 2210번 - 숫자판 점프 본문

CS/Algorithm

[BOJ/Python] 백준 2210번 - 숫자판 점프

sohy 2022. 8. 6. 00:31

백준 #2210 숫자판 점프

 

2210번: 숫자판 점프

111111, 111112, 111121, 111211, 111212, 112111, 112121, 121111, 121112, 121211, 121212, 211111, 211121, 212111, 212121 이 가능한 경우들이다.

www.acmicpc.net

import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline

grid = [list(map(int, input().split())) for _ in range(5)]
num_set = set()   # 서로 다른 여섯 자리의 수들의 집합

def dfs(i, j, num):
  num += str(grid[i][j])
  if len(num) == 6:
    num_set.add(num)
    return
  for dx, dy in (0, 1), (0, -1), (1, 0), (-1, 0):
    x, y = i + dx, j + dy
    if 0 <= x < 5 and 0 <= y < 5:
      dfs(x, y, num)

for i in range(5):
  for j in range(5):
    dfs(i, j, '')

print(len(num_set))

방문한 곳을 표시할 필요도 없는 완전한 브루트포스 문제. 시작 정점을 [0][0] 부터 [4][4] 까지 해서 깊이 우선 탐색을 하면 끝이다. 탐색하다 숫자열 길이가 6이 되면 해당 숫자열을 집합 안에 저장하여 같은 숫자열이 또 저장되지 않도록 한다. dfs를 끝내고 집합 내에 저장 돼 있는 숫자열 개수를 출력하면 끝!

Comments