본문 바로가기
Algorithm/DFS&BFS&백트래킹&재귀

[Python3] 1189번 컴백홈

by HANNI하니 2023. 4. 9.

사용 언어 - Python3

문제 - 컴백홈

 

1189번: 컴백홈

첫 줄에 정수 R(1 ≤ R ≤ 5), C(1 ≤ C ≤ 5), K(1 ≤ K ≤ R×C)가 공백으로 구분되어 주어진다. 두 번째부터 R+1번째 줄까지는 R×C 맵의 정보를 나타내는 '.'과 'T'로 구성된 길이가 C인 문자열이 주어진다

www.acmicpc.net

 

정답

nx,ny 이동하는 BFS 만들기 (정답 맞춘 여부 X)

dx = [-1,0,1,0]
dy = [0,-1,0,1]

from collections import deque

def DFS(x,y,count):
    global answer
    visited[x][y] = 1
    if [x,y] == [0,c-1]: #오른쪽 맨 윗(집)도착시
        if count == k: #거리가 k라면 조건만족
            answer += 1
        return
    for i in range(4):
        nx = x+dx[i]
        ny = y+dy[i]
        if 0<=nx<r and 0<=ny<c and visited[nx][ny] == 0 and graph[nx][ny] != "T":
            visited[nx][ny] = 1
            DFS(nx,ny,count+1)
            visited[nx][ny] = 0


r,c,k = map(int,input().split()) #행, 열, 거리
graph = [list(input()) for _ in range(r)] #집까지 가는 길 배열
visited = [[0 for _ in range(c)]for _ in range(r)] #방문여부
answer = 0
DFS(r-1,0,1) #왼쪽 맨 아래에서 시작
print(answer)

 

 

 


레퍼런스

  • 정답 참고
 

[BOJ]1189. 컴백홈

문제: 한수는 캠프를 마치고 집에 돌아가려 한다. 한수는 현재 왼쪽 아래점에 있고 집은 오른쪽 위에 있다. 그리고 한수는 집에 돌아가는 방법이 다양하다. 단, 한수는 똑똑하여 한번 지나친 곳

codedrive.tistory.com

  • 정답 깃허브
 

GitHub - yyeongeun/codingtest: 코딩테스트 공부

코딩테스트 공부. Contribute to yyeongeun/codingtest development by creating an account on GitHub.

github.com

 

댓글