알고리즘 공부/백준
(Python)백준 코딩테스트 연습 - 컴백홈(1189)
HRuler
2023. 6. 30. 16:24
1. 문제
https://www.acmicpc.net/problem/1189
1189번: 컴백홈
첫 줄에 정수 R(1 ≤ R ≤ 5), C(1 ≤ C ≤ 5), K(1 ≤ K ≤ R×C)가 공백으로 구분되어 주어진다. 두 번째부터 R+1번째 줄까지는 R×C 맵의 정보를 나타내는 '.'과 'T'로 구성된 길이가 C인 문자열이 주어진다
www.acmicpc.net
2. 풀이
import sys
input = sys.stdin.readline
r, c, k = map(int, input().split())
mapList = [list(input()) for i in range(r)]
kCnt = 0
def searchMap(mapList, nowR, nowC, moveCnt):
global kCnt
if nowR == 0 and nowC == (c - 1):
if moveCnt == k:
kCnt += 1
return
if nowR - 1 >= 0 and mapList[nowR - 1][nowC] != "T":
mapList[nowR-1][nowC] = "T"
searchMap(mapList, nowR - 1, nowC, moveCnt + 1)
mapList[nowR-1][nowC] = "."
if nowC + 1 < c and mapList[nowR][nowC + 1] != "T":
mapList[nowR][nowC+1] = "T"
searchMap(mapList, nowR, nowC + 1, moveCnt + 1)
mapList[nowR][nowC+1] = "."
if nowR + 1 < r and mapList[nowR + 1][nowC] != "T":
mapList[nowR+1][nowC] = "T"
searchMap(mapList, nowR + 1, nowC, moveCnt + 1)
mapList[nowR+1][nowC] = "."
if nowC - 1 >= 0 and mapList[nowR][nowC - 1] != "T":
mapList[nowR][nowC-1] = "T"
searchMap(mapList, nowR, nowC - 1, moveCnt + 1)
mapList[nowR][nowC-1] = "."
mapList[r-1][0] = "T"
searchMap(mapList, r - 1, 0, 1)
if mapList[0][c-1] == "T":
print(0)
else:
print(kCnt)