아이디어, 배운 점 😍
맨 처음엔 가희의 위치를 찾아야 한다. 그리고 가희의 위치를 길로 만들었다.(그래서 갈 수 있도록~)
가희의 위치부터 탐색을 시작한다.
상하좌우를 탐색해서
범위 내이고
- 장애물이면 못가니까 continue
- 고구마이면 거기로 이동하되, 시간과 고구마 먹은 양을 1씩 증가
- 길이면 거기로 이동하되, 시간만 1 증가했다.
시간이 다 되었을 때 먹은 고구마를 최대값으로 갱신한 후에 return을 해주었다.
처음에는 기계적으로..(?) visited 리스트를 만들어서 체크를 할까 했지만, 갔던 길을 또 갈 수 있으니까 체크할 필요가 없었다.
그 자리에 가만히 있을 수도 있다고 했지만 딱히 고려하진 않았다.
만약에 움직여서 고구마를 먹을 수 있으면, 고구마 먹는 게 이득이니까 움직여야 겠고!
움직여도 고구마 먹을 수 없다고 해도, 가만히 있든 움직이든 ate는 같으니까..
코드 ⭐
R, C, T = map(int, input().split())
arr = list(list(input()) for _ in range(R))
# 가희 위치 찾기
def find_G():
for i in range(R):
for j in range(C):
if arr[i][j] == 'G':
return (i, j)
i, j = find_G()
arr[i][j] = '.' # 가희 위치 길로 만들기
# 상하좌우
directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]
# 탐색
max_ate = 0
def dfs(y, x, t, ate):
global max_ate
if t == T: # 시간 다 되었으면
max_ate = max(max_ate, ate) # 최대값으로 갱신
return
for k in range(4):
ny = y + directions[k][0]
nx = x + directions[k][1]
if 0 <= ny < R and 0 <= nx < C: # 범위 내
if arr[ny][nx] == '#': # 장애물이면 갈 수 없음
continue
elif arr[ny][nx] == 'S': # 고구마이면
arr[ny][nx] = '.' # 고구마 사라짐
dfs(ny, nx, t + 1, ate + 1)
arr[ny][nx] = 'S' # 돌아오면 고구마 복구
elif arr[ny][nx] == '.': # 그냥 길이면
dfs(ny, nx, t + 1, ate)
dfs(i, j, 0, 0)
print(max_ate)
728x90
'즐거운 PS 👩💻🥰' 카테고리의 다른 글
[백준-파이썬] 18511: 큰 수 구성하기 (0) | 2021.10.07 |
---|---|
[백준-파이썬] 7562: 나이트의 이동 (0) | 2021.10.07 |
[백준-파이썬] 11660 : 구간 합 구하기 5 (0) | 2021.10.07 |
[백준-파이썬] 2812: 크게 만들기 (0) | 2021.10.07 |
[백준-파이썬] 22942: 데이터 체커 (0) | 2021.10.07 |