문제
백준 12094
설명
DFS 구현
쉬운 방법은 움직이는 방향에 따른 줄마다
- 간단한 배열이나 리스트를 만들어서
- 유효숫자만 뽑아내서 계산한 후에
- 결과를 끝부분에 집어넣고 나머지를 0으로 넣으면 됨.
- 여러번 루프를 돌아야해서 느리지만 실수를 확실히 덜함.
다른 방법은 움직이는 방향에 따른 줄마다
- 비교할 포인터
p1, p2
랑 끝부분에 차례로 넣은 포인터 updated
를 두어서 루프 돌면서 한번에 처리하는 것임
p2
는 0 이 아닌 수를 먼저 찾으러 가고
p1
은 p2
앞의 0 이 아닌 수를 가리키게 해서
- 둘을 비교한 후 같은지에 따라
board[updated]
에 적절한 값을 줌
- 그리고
updated
는 다음 값을 가르키게 함.
updated
되지 않은 값들은 다 0
을 줌.
Pruning
다음 두가지 경우에서 Pruning 안하면 시간초과남
- 움직여도 똑같은 경우
- 움직여도 최댓값을 못넘는 경우
- 나는 여기서 등호 빼먹었는데 이걸로 시간초과가 났음.
시간 복잡도
O(\(2^N \times N^2\))
코드
댓글남기기