티스토리 뷰
문제
한수는 캠프를 마치고 집에 돌아가려 한다. 한수는 현재 왼쪽 아래점에 있고 집은 오른쪽 위에 있다. 그리고 한수는 집에 돌아가는 방법이 다양하다. 단, 한수는 똑똑하여 한번 지나친 곳을 다시 방문하지는 않는다.
cdef ...f ..ef ..gh cdeh cdej ...f
bT.. .T.e .Td. .Tfe bTfg bTfi .Tde
a... abcd abc. abcd a... a.gh abc.
거리 : 6 6 6 8 8 10 6
위 예제는 한수가 집에 돌아갈 수 있는 모든 경우를 나타낸 것이다. T로 표시된 부분은 가지 못하는 부분이다. 문제는 R x C 맵에 못가는 부분이 주어지고 거리 K가 주어지면 한수가 집까지도 도착하는 경우 중 거리가 K인 가짓수를 구하는 것이다.
입력
첫 줄에 정수 R(1 ≤ R ≤ 5), C(1 ≤ C ≤ 5), K(1 ≤ K ≤ R×C)가 공백으로 구분되어 주어진다. 두 번째부터 R+1번째 줄까지는 R×C 맵의 정보를 나타내는 '.'과 'T'로 구성된 길이가 C인 문자열이 주어진다.
출력
첫 줄에 거리가 K인 가짓수를 출력한다.
예제 입력 1
3 4 6
....
.T..
....
예제 출력 1
4
풀이
R, C, K = map(int, input().split())
map = []
visited = [[0]*C for _ in range(R)]
for i in range(R):
lst = list(input())
for j in range(C):
if lst[j] == 'T': # 가지 못하는 부분은 이미 방문했다고 처리
visited[i][j] = 1
map.append(lst)
answer = 0
dx, dy = [1, -1, 0, 0], [0, 0, 1, -1]
def dfs(x, y, count):
global answer
if x == 0 and y == C-1:
if count == K:
answer += 1
for i in range(4):
nx, ny = x + dx[i], y + dy[i]
if nx < 0 or nx >= R or ny < 0 or ny >= C:
continue
if visited[nx][ny] == 0:
visited[nx][ny] = 1
dfs(nx, ny, count + 1)
visited[nx][ny] = 0 # 다른 경로 탐색을 위해 방문여부 리셋
visited[R-1][0] = 1
dfs(R-1, 0, 1)
print(answer)
'개발자를 위한 한 걸음 > 코딩 문제' 카테고리의 다른 글
주식 - 백준 #11501, 그리디 알고리즘 (0) | 2022.11.28 |
---|---|
적록색약 - 백준 #10026, 그래프/너비 우선 탐색/깊이 우선 탐색 (0) | 2022.11.28 |
수들의 합 - 백준 #1789, 수학/그리디 알고리즘 (0) | 2022.11.15 |
치킨 배달 - 백준 #15686, 구현/브루트포스/백트래킹 (0) | 2022.11.14 |
계단 오르기 - 백준 #2579, 다이나믹 프로그래밍 (0) | 2022.11.14 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 정렬
- 코드트리
- 백준
- 카카오
- 실버2
- 그리디 알고리즘
- 브루트포스 알고리즘
- 리트코드
- leetcode
- 시뮬레이션
- 백트래킹
- lv.2
- Simulation
- 구현
- 그래프 탐색
- 코딩테스트
- 릿코드
- 다이나믹 프로그래밍
- 카카오 코딩테스트
- 문자열
- 너비 우선 탐색
- 그래프 이론
- 실버3
- 수학
- 프로그래머스
- lv.3
- Python
- 코딩 테스트
- 깊이 우선 탐색
- 골드5
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함