PS
백준 1103. 게임
tose33
2022. 10. 8. 14:37
https://www.acmicpc.net/problem/1103
1103번: 게임
줄에 보드의 세로 크기 N과 가로 크기 M이 주어진다. 이 값은 모두 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 보드의 상태가 주어진다. 쓰여 있는 숫자는 1부터 9까지의 자연수 또는
www.acmicpc.net
이 문제는 처음 봤을때는 그냥 dfs로 모든 경우 구하면 되는것 같지만 중복되는 연산이 많기 때문에 dp를 이용해야 한다.
dp[][] 배열과 mark[][] 배열을 만든다.
mark 배열은 방문한 적이 있다면 true로 해준다.
dp 배열은 해당 위치까지 오는데 동전을 움직인 최대 횟수를 기록한다.
dfs를 돌면서 다음 위치가 mark[][] == true 즉 이미 방문한적이 있다면 싸이클이 형성된다는 것이고 -1 을 출력하고 바로 프로그램을 종료하면 된다.
다음 위치의 dp[][]값이 -1이 아니고(방문한적이 있고) 현재 계산 깊이보다 크다면, 계산할 필요 없으므로 계산을 안해줘야 시간초과가 안난다.
이런 문제를 풀때마다 값을 리턴하는 dfs 를 내가 아직 서투르다고 느껴진다.
다른 분들 풀이를 참조해서 값을 리턴하는 dfs로 구현해봤다.