슬기로운슬기

1. 문제

[완전탐색][dfs][재귀] 

https://school.programmers.co.kr/learn/courses/30/lessons/87946

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

2. 해설

<bash />
class Solution { // 최대 탐험 횟수를 저장할 전역 변수 private int max = 0; // 주어진 던전(dungeons)에서 k만큼의 에너지로 탐험할 때 최대 탐험 횟수를 반환하는 메서드 public int solution(int k, int[][] dungeons) { // 각 던전을 방문했는지 여부를 저장할 배열 int[] visited = new int[dungeons.length]; // 탐험을 시작하는 메서드 호출 explore(dungeons, visited, k, 0); // 최대 탐험 횟수 반환 return max; } // 재귀적으로 던전을 탐험하며 최대 탐험 횟수를 찾는 메서드 private void explore(int[][] dungeons, int[] visited, int k, int count) { // 모든 던전을 방문하며 가능한 경우를 체크 for (int i = 0; i < dungeons.length; i++) { // 방문하지 않았고, 현재 남은 에너지가 해당 던전을 탐험하기에 충분한 경우 if (visited[i] == 0 && k >= dungeons[i][0]) { // 던전을 방문했다고 표시 visited[i] = 1; // 던전을 탐험하고, 탐험 횟수와 남은 에너지 갱신 explore(dungeons, visited, k - dungeons[i][1], count + 1); // 백트래킹: 다른 경로로의 탐험을 위해 방문 표시 해제 visited[i] = 0; } } // 현재 경로에서 얻은 최대 탐험 횟수를 업데이트 if (max < count) { max = count; } } }
  • 주석 참고 
  • 모든 경우의 수를 확인해야하기 때문에 DFS를 사용하였다. 
    • 방문한 노드(자기 자신)은 포함되지 않도록 처리 해야함 
반응형
profile

슬기로운슬기

@스를기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!