diff --git "a/Softeer/\354\210\234\354\204\234\353\214\200\353\241\234 \353\260\251\353\254\270\355\225\230\352\270\260/sumin.py" "b/Softeer/\354\210\234\354\204\234\353\214\200\353\241\234 \353\260\251\353\254\270\355\225\230\352\270\260/sumin.py"
new file mode 100644
index 00000000..fef3e327
--- /dev/null
+++ "b/Softeer/\354\210\234\354\204\234\353\214\200\353\241\234 \353\260\251\353\254\270\355\225\230\352\270\260/sumin.py"
@@ -0,0 +1,75 @@
+"""
+풀이시간: 40분
+
+
+n: 격자의 크기(2 ≤ n ≤ 4)
+m: 순서대로 방문해야 하는 칸의 수(2 ≤ m ≤ n^2)
+
+n개의 수(0 or 1)
+- 0: 빈 칸
+- 1: 벽
+
+방문해야할 m개의 칸 (x, y)가 주어진다
+- 주어진 칸에 벽이 있는 경우능 없고, 중복도 없다.
+
+
+n과 m이 매우 작기 때문에 DFS를 통해 모든 경우의 수를 확인한다.(브루트 포스)
+이 때, 더 이상 다음 칸으로 이동할 수 없다면 탐색을 포기한다.(백트래킹)
+
+<시간복잡도>
+O(N^2)
+"""
+import sys
+input = sys.stdin.readline
+
+
+def dfs(cur_x: int, cur_y: int, nxt_idx: int):
+ """
+ cur_x: 시작 칸의 x좌표
+ cur_y: 시작 칸의 y좌표
+ nxt_idx: 다음 칸의 인덱스
+ """
+ global cnt
+ # 다음 칸에 도달한 경우
+ if cur_x == go[nxt_idx][0] and cur_y == go[nxt_idx][1]:
+ # 1) 마지막 칸까지 도달했다면 경우의 수를 1 증가시키고 종료
+ if nxt_idx == m-1:
+ cnt += 1
+ return
+ # 2) 이동한 칸이 마지막 칸이 아니라면 방문해야할 칸의 idx 증가
+ else:
+ nxt_idx += 1
+
+ # 현재 위치 방문처리
+ visited[cur_x][cur_y] = True
+
+ for k in range(4):
+ nx, ny = cur_x+dx[k], cur_y+dy[k]
+ if (0 <= nx < n and 0 <= ny < n) and board[nx][ny] == 0 and not visited[nx][ny]:
+ dfs(nx, ny, nxt_idx)
+
+ visited[cur_x][cur_y] = False
+
+
+# n: 격자의 크기, m: 순서대로 방무해야 하는 칸의 수
+n, m = map(int, input().split())
+# 격자판(0: 빈 칸, 1: 벽)
+board = [list(map(int, input().split())) for _ in range(n)]
+# 방문처리 배열
+visited = [[False] * n for _ in range(n)]
+
+# 방문해야할 칸의 좌표
+go = []
+for _ in range(m):
+ x, y = map(int, input().split())
+ go.append((x-1, y-1))
+
+# 상, 하, 좌, 우 방향으로 이동
+dx = [1, -1, 0, 0]
+dy = [0, 0, 1, -1]
+
+# 경우의 수
+cnt = 0
+# 순차적으로 방문
+dfs(go[0][0], go[0][1], 1)
+print(cnt)
\ No newline at end of file