코테/프로그래머스

[프로그래머스/Lv. 2] 피로도 (JAVA)

imname1am 2023. 9. 13. 21:54
반응형

🔺 문제

 

프로그래머스

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

programmers.co.kr

 

 

🔺 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.*;
import java.io.*;
 
class Solution {
    static int cnt = 0;
    static boolean[] visited;
    
    public int solution(int k, int[][] dungeons) {
        visited = new boolean[dungeons.length];
        
        back(0, k, dungeons);
        
        return cnt;
    }
    
    private static void back(int depth, int k, int[][] arr) {
        for(int i = 0 ; i < arr.length ; i++) { // 모든 경우의 수 확인
            if(!visited[i] && arr[i][0<= k) { // 방문한 적 없고, 현재 피로도가 필요 피로도보다 높다면
                visited[i] = true;
                back(depth + 1, k - arr[i][1], arr); // depth와 피로도 갱신
                visited[i] = false;
            }
        }
        
        cnt = Math.max(cnt, depth); // 최댓값 갱신
    }
}
cs
✅ 해결 아이디어
✔ 완전탐색 -> DFS (재귀)
- DFS로 모든 경우의 수 탐색
- 던전 탐색 가능한 모든 방법에 대해 탐색하며, 최대 던전 수 갱신

 

💥 유의사항

• 던전 개수가 최대 8개라 완전탐색해도 시간이나 메모리 상 문제 X

• 종료 조건 X. = 모든 경우의 수 순회

(예 : 1->2->3, 1->3->2, 2->1->3, ...)

 

 


💬 느낀 점

완전탐색하려면 재귀를 사용할테니 DFS / 백트래킹을 잘 활용해야겠다,,

 

 

1회독 2회독 3회독 4회독 5회독
V 10.12 240221 240726  

 

 

(+ 2회독 10.12)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.util.*;
 
class Solution {
    static int k;
    static int[][] dungeons;
    
    static boolean[] visited;
    static int cnt = 0;
    
    public int solution(int k, int[][] dungeons) {  // k : 현재 피로도 | dungeons[][] : [최소 필요도, 소모 피로도]
        this.k = k;
        this.dungeons = dungeons;
        
        visited = new boolean[dungeons.length];
        
        back(0, k);
        return cnt;
    }
    
    private static void back(int depth, int k) {        
        for(int i = 0 ; i < dungeons.length ; i++) {    // 🔔 모든 경우의 수 확인
            if(!visited[i] && dungeons[i][0<= k) {    // 방문한 적 없고, 필요 피로도보다 현재 피로도가 높다면
                visited[i] = true;
                back(depth + 1, k - dungeons[i][1]);    // depth와 피로도 갱신
                visited[i] = false;
            }
        }
        
        cnt = Math.max(cnt, depth);
    }
}
cs

 


(참고)

 

[프로그래머스] 피로도 - JAVA

프로그래머스 피로도 - JAVA 문제 설명 XX게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기

dlee0129.tistory.com

 

[프로그래머스] 피로도 - JAVA [자바]

프로그래머스 코딩테스트 고득점 Kit 부수기

velog.io

 

[프로그래머스] 피로도(JAVA)

https://school.programmers.co.kr/learn/courses/30/lessons/87946 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는

lollaziest.tistory.com

 

반응형