반응형
https://school.programmers.co.kr/learn/courses/30/lessons/87946
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
package Programmers; public class 피로도 { static int[] ch; static int[][] pm; static int temp; public static void main(String[] args){ 피로도 T = new 피로도(); int k = 80; int[][] dungeons = {{80,20},{50,40},{30,10}}; T.solution(k, dungeons); } public int solution(int k, int[][] dungeons) { int m = dungeons.length; ch = new int[m]; //체크배열 pm = new int[m][2]; //조합된 던전을 넣을 배열 dfs(0, m, dungeons, k); return temp; } public void dfs(int L, int m, int[][] dungeons, int k){ if(L == m){ //던전조합이 완료 //pm을 순서대로 돌면서 결과를 구한다. int rs = calc(pm, k); temp = Math.max(rs, temp); // 최대로 돌수있는 던전의 개수를 구한다. }else{ for (int i = 0; i < m; i++) { if(ch[i] == 0){ //방문하지 않은곳은 0 ch[i] = 1; //방문하면 1 pm[L] =dungeons[i]; dfs(L+1, m, dungeons, k); ch[i] = 0; //백트레킹 해준다. } } } } //조합된 pm으로 돌수있는 던전의 횟수 public int calc(int[][] pm, int k){ int cnt = 0; for (int i = 0; i < pm.length; i++) { int[] inD = pm[i]; int min = inD[0]; int pay = inD[1]; if(k >= min){ //던전입장 k -= pay; cnt++; }else{ return cnt; } } return cnt; } }
1. 풀이
- DFS 탐색으로 던전의 조합을 구해서 pm배열에다가 넣는다.
- calc 메서드 만들어서 조합된pm으로 돌수있는 던전의 횟수를 구한다.
※ DFS로 중복이 안되는 순열 만들수 있으면 쉽게 풀수있음.
반응형
'기타 > 알고리즘' 카테고리의 다른 글
[알고리즘] 프로그래머스 - 전력망을 둘로 나누기 Lv2 Java BFS (0) | 2023.05.25 |
---|---|
[알고리즘] 프로그래머스 - 나머지가 1이 되는 수 찾기 Lv1 Java (0) | 2023.05.25 |
[알고리즘] 프로그래머스 - 주차요금계산 Lv2 Java (1) | 2023.05.22 |
[알고리즘] 프로그래머스 - 두 큐 합 같게 만들기 (1) | 2023.05.19 |
[알고리즘] 프로그래머스 - 할인행사 Lv2 Java (0) | 2023.05.18 |