1. 생각
// 생각
// 던전들을 각기 다른 모든 순서로 돌면서 탐험 가능한 최대 던전 개수를 구해야 한다
// 예를 들어 3개라면 123 132 213 231 312 321 ...
// 각 던전 for문 돌면서 재귀로 완전탐색하면 되지 않을까?
// 구현
// for문으로 던전을 돈다
// 각 던전을 시작으로 해서 순차적으로 다른 던전 돌도록 탐색을 해본다
// 현재 피로도가 최소 필요도보다 크거나 같다
// 현재 피로도 = 현재 피로도 - 소모 필요도
// 현재 피로도가 최소 필요도보다 작다
// 중단
----
// 생각
// 던전을 돌 수 있는 모든 경우의 수를 돌면서 총 몇 개를 방문할 수 있는지 세어야 함
// 완전탐색, 재귀로 구현 가능
// 구현
// 방문배열 초기화
// 재귀 함수에 매개변수로 주어야 할 것들
// 던전 배열, 현재 피로도, 현재까지 방문한 개수
// 재귀 함수
// 던전 돌기
// 현재 던전 방문 안 함 && 현재 피로도 >= 현재 방문한 던전의 최소 필요 피로도
// 현재 피로도 -= 사용 피로도
// 방문 표시
// count 증가
// 재귀함수 다시 방문
// 방문 취소
// 현재 던전 방문 || 현재 피로도 < 현재 방문한 던전의 최소 필요 피로도
// 그냥 패스
// for문 돌면서 얻은 count와 현재 answer중 최댓값으로 answer 갱신
2. 회고
- 저번에 풀었던 재귀 완전탐색과 비슷한 스타일이어서 최대한 그때의 기억을 떠올리며 재귀 함수를 구현해보려고 하였다.
- 재귀로 구현하고자 할 때는 재귀 함수에 넘겨줘야 하는 매개변수 값과 재귀를 마친 후 초기화 되어야 하는 값들을 잘 구별해서 매개변수로 넣어줄 건 넣어주고, 초기화할 건 초기화해야 올바른 코드를 작성할 수 있다. 보통 방문 배열은 재귀 함수 끝 부분에 초기화해서 방문했던 정보를 초기화한 후 이후 for문에서 다시 방문하도록 하는 것 같고, 보통 배열에 접근해야 하기 때문에 index를 넘겨줘야 하고, 하나의 탐색을 한 후 값이 처음으로 돌아와야 하는 변수들도 매개변수로 넘겨줘야하는 것 같다.
- 또한, 재귀 함수 내부에 for문을 두고, 그 for문 안에 방문 배열의 방문 여부를 확인한 후 방문하지 않았을 경우 다시 재귀함수를 호출하는 형식으로 완전 탐색이 구현될 수 있다.
- 저번에는 잘 이해가 안 되었던 재귀함수를 활용한 완전 탐색이 이번에는 더 잘 이해가 되어서 뿌듯하다.
- 그런데 다른 풀이들 보니 나보다 코드가 더 짧고 간결한 것들이 있어서 좀 더 간단히도 할 수 있구나... 이런 반성의 마음가짐을 가지기도 하였다.
---
- 재귀 연속으로 풀었을 때는 그래도 곧 잘 풀어냈는데 안 하다보니 또 까먹어서 애먹음
- 지난번에 어떻게 풀었는지 생각이 안 나서 참고함... 근데 지난번에 푼 재귀는 되게 비효율적이라 다른 재귀 풀이를 참고하였음
- 다른 재귀 풀이는... 손으로 메모해 가면서 이해하면 이해가 가긴 하는데 내가 구현해내는 데는 아직 이해가 가지 않는다. 이해가 될랑 말랑
- 이 문제를 포함한 완전탐색을 위한 재귀의 핵심은 재귀에 들어가서 for문을 돌고 재귀 호출한 후 방문 배열을 초기화해서 for문 하나로 완전탐색을 할 수 있다는 것 같다. 다른 비슷한 완전탐색에 적용하면 좋을듯
3. 체크
풀이 횟수 | 시간 | 정답 여부 | 참고 여부 |
2 | 1시간 20분 | O | X |
3 | 1시간 | X | O |
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 모음사전_84512 (0) | 2023.07.18 |
---|---|
[프로그래머스] 전력망을 둘로 나누기_86971 (0) | 2023.07.18 |
[프로그래머스] 카펫_42842 (1) | 2023.07.16 |
[프로그래머스] 소수찾기_42839 (0) | 2023.07.14 |
[프로그래머스/자바] 구명보트_42885 (0) | 2023.07.13 |