MY MEMO
[Week14] 해저탐사선 본문
이문제는 혼자 못풀었다...정말 어려웠다..
DFS로 풀면 되겠지 했는데..
대체 어디서 visit를 풀어줘야되고 어디서 안풀어줘야되고를 몰랐다
근데 이게 웬걸..
http://blog.eairship.kr/268 깔끔하게 정리해놓은 DFS의 이론 아래에 이것과 비슷한 문제가 있었다
단지 이 사이트의 문제는 시작과 끝점이 정해져있고 minimum을 찾는것이고
그리고 문제해결기법의 문제는 시작점만 있고 maximum을 찾는 것이다.
그렇다면!!! 그 두개의 조건만을 변경해주면 되는 것이다.
아 잡힐듯 말듯해서 풀지 못했는데 이렇게 쉽게 풀리다니
이제 정신 똑디 잡고 문제 풀어야겠다
이 문제의 내가 헷갈린 가장 큰 visit라는 부분은
map을 변경하여 간단하게 해결되었다
어짜피 1인 부분은 visited로 설정해줬기때문에 안갈꺼고 0인부분만 갈텐데
지나간 0인 부분을 1로 대체하고 그 값이 visit도 대체해주고있다.
크.. 메모리 절약
한번 돌아간 부분은 1로 해주고 만약 어느 방향에서도 가지 못한다면 return
저 함수는 전체를 다 도는 함수이다
역시 모든 경우를 다 돌려면 DP..
아 그리고 이전에 내가 음..적용하지 못했던 것은 바로 cache이다.
만약 지나간 부분의 자리에 최대 몇개가 들어있는지 max값으로 저장할 수 있다면 그리고 나중에 그곳에 도달했을때 다시 return을 해주면
얼마나 빠를까 생각했다.
하지만 생각보다 까다로웠던 것 같다.
이 코드가 처음에 cache로 짠 코드이다
사실 저 코드에 조금 변형시켜봤는데
처음에는 visit도 있었고 if마다마다 visit도 변형시켰고
그리고 저 cache도 더 복잡했다.
일단 저걸 실행해보면
위의 그림의 예제에서
이러한 값이 나온다
일단 안간 부분이랑 처음부분은 0으로 설정했으니 어쩔 수 없었다
하지만 주목해야할 점은 바로 6이다 저 값이 돌고 돌아 저기에 저장되었다 하지만 만약에
0->1->6으로 가면 조금 더 큰 값을 얻을 수 있다.
결국 마지막값이 더 큰 수가 나온다는 것이다.
하지만 현재가 6이기때문에 섯부른 판단을 했다
6이므로 지금 들어오는 애보다는 크니까 더 큰수이겠지 라고 판단한 것이다
결국 cache를 빼야했다
그래서 정답 코드를 만들었다.
'ALGORITHM > 문제해결기법' 카테고리의 다른 글
[Week14] 철수의 7 세그먼트 숫자놀이 (0) | 2017.06.14 |
---|---|
[문제해결기법] Ordered Tree 완성하기 (0) | 2017.05.22 |
[문제해결기법] 길동이의 여행 (0) | 2017.05.19 |
[문제해결기법] 절대반지를 건 사다리 게임 (0) | 2017.05.19 |
[문제해결기법] 곱셈게임 (0) | 2017.05.09 |