알고리즘 공부/백준

(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)