@djm03178 혹시 ㅠㅡㅠ 시간이 되신다면 부탁드리겠습니다 선생님 ...
1937번 - 욕심쟁이 판다
@lovinix 감사합니다!!!
ㅠㅡㅠ 먼가 대충은 그런가 하는데...
함수가 재귀호출로 문어발식이라 .. 확실하게 이해가 안되네요 ... 더 공부해야겠어요 ..
- 19번 라인의 if문은, 현재지점에서 다음지점으로 오름차순인 순서를 기준으로 한다는 의미인거겟죠 ?
- 22번 라인에서... temp= 1; temp += dfs(next_y, next_x); 를 해주는 것은...
현재지점거리 1 + (nx, ny)의 최대일수 ? 가 되는건가요 ..? 즉... 오름차순을 만족하는 경우면 우선
계속 진행(먹방)가능한 지점이니까 더해주는거구요.
오름차순.. 이라는게 무엇을 말씀하시는지 잘 모르겠습니다.
19번째 if문은 next_x,next_y가 N*N 배열을 벗어나지않으면서 && 다음에 움직일 곳이 지금 있는 곳보다 대나무가 많을 때 를 의미합니다.
"dfs"가 언제 끝나는가는 이 문제에서 " 더 이상 판다가 이동할 수 없는 조건 " 과 일치합니다.
즉, 사방(위,아래,왼쪽,오른쪽)에 존재하는 대나무의 수가 현재 칸에 존재하는 대나무의 수보다 "모두" 적어야합니다.
이 코드에서는 해당 조건을 만족할시, for문이 4번 도는동안(즉, 사방을 모두 검색하는동안) if문 내의 bamboo[y][x] < bamboo[next_y][next_x] 가 항상 false가 되며,
이 때 1을 dp배열의 해당위치에 저장 후, return하게됩니다. (14, 28번째 줄) (재귀의 끝)
따라서 이 위치의 옆에서 해당 위치에 접근하려 할 경우, 해당위치의 dfs함수값 + "1(현재위치)"를 하면서 값을 쌓아나가는 것입니다.
이것이 이해가 잘 안가신다면, 1차원배열 {1,3,2}로 dfs(0,0)을 실행했을 때 어떻게 진행이 될 것인가 손으로 실행과정을 적어보시는 것도 괜찮을 것 같습니다.
댓글을 작성하려면 로그인해야 합니다.
lswoo3021 5년 전
게시판에 있던 다른분 코드를 같이보려고 가져왔는데요 ..
일반적인 dfs 완전탐색에서 재귀호출은 이해가 됩니다.
종료조건을 주면.. 보통 전역변수의 값을 바꾸고 리턴하게되잖아요 ?
근데 아래와 같은 코드 22번째라인처럼 temp += dfs();는 어떤 효과를 가져오게 되는지 와닿지가 않습니다
temp 변수가 여러번 더해지는 것은 아니고, 결국 마지막에 리턴된 상수값을 더하게 되는거죠 ??
하... 어렵넹요
혹시 11번라인 부터 28번 라인... 설명이 가능하신 분 있다면 한 수만 부탁드리겠습니다 ㅠㅡㅠ
알고리즘 공부는 넘 힘드네요 ... 심화된 문제는 스스로 이해를 못하면
따로 물어볼 선생님도없고 강의도 기초적인것뿐이라서요 ㅠㅠ
재귀함수 이해하기 쉬운 방법좀 알려주세요
보통 재귀함수 이해하기가 쉽고 직관적이나, 스택오버플로가 날 수 있다 이렇게 말하는데 ...
저는 반대에요 .... 끝까지 들어갓다가 하나씩 리턴되어지는 과정이 머리속에서 너무 헷갈리네요...
백트래킹까진 이해돼서 잘풀지만.. dp 와 엮이는건 이해가 ㅠ