반응형
문제
- 문제 링크: 피로도
해설
- 자료구조:
- 시간복잡도:
(풀이과정)
1)
2)
3)
4)
코드
(C언어)
solution 1)
더보기
solution 1
#include<>
solution 2)
더보기
#include<>
solution 3)
더보기
#include<>
(C++)
solution 1)
더보기
#include<>
solution 2)
더보기
#include<>
solution 3)
더보기
#include<>
(C#)
solution 1)
더보기
#include<>
solution 2)
더보기
#include<>
solution 3)
더보기
#include<>
(Java)
solution 1)
- N: 던전의 개수
- 최악의 경우 모든 경로를 탐색하므로 경우의 수는 N!
- 최종 시간 복잡도: O(N!)
더보기
class Solution {
private static int answer;
private static int[][] Dungeons;
private static boolean[] visited;
// 백트래킹을 위한 DFS
private static void backtrack(int k, int cnt) {
for (int i = 0; i < Dungeons.length; ++i) {
// 현재 피로도(k)가 i번째 던전의 최소 필요 피로도보다 크거나 같고, i번째 던전을 방문한 적이 없다면
if (!visited[i] && k >= Dungeons[i][0]) {
visited[i] = true; // i번째 던전을 방문 처리
// 현재까지의 최대 탐험 가능 던전 수와 i번째 던전에서 이동할 수 있는 최대 탐험 가능 던전 수 중 큰 값을 선택하여 업데이트
backtrack(k - Dungeons[i][1], cnt + 1);
answer = Math.max(answer, cnt + 1);
visited[i] = false; // i번째 던전을 다시 방문 취소
}
}
}
public int solution(int k, int[][] dungeons) {
answer = 0;
Dungeons = dungeons;
// 던전 방문 여부를 저장할 배열
visited = new boolean[dungeons.length];
backtrack(k, 0); // DFS 메서드 수행
return answer;
}
}
solution 2)
더보기
#include<>
solution 3)
더보기
#include<>
(Python)
solution 1)
- N: 던전의 개수
- 최악의 경우 모든 경로를 탐색: O(N!)
더보기
# 백트래킹을 위한 DFS
def dfs(cur_k, cnt, dungeons, visited):
answer_max = cnt
for i in range(len(dungeons)):
# 현재 피로도(cur_k)가 i번째 던전의 최소 필요 피로도보다 크거나 같고, i번째 던전을 방문한 적이 없다면
if cur_k >= dungeons[i][0] and visited[i] == 0:
visited[i] = 1 # i번째 던전을 방문 처리
# 현재까지의 최대 참험 가능 던전 수와 i번째 던전에서 이동할 수 있는 최대 탐험 가능 던전 수 중 큰 값을 선택하여 업데이트
answer_max = max(
answer_max, dfs(cur_k - dungeons[i][1], cnt + 1, dungeons, visited)
)
visited[i] = 0
return answer_max
# 최대 탐험 가능 던전 수를 계산하는 함수
def solution(k, dungeons):
visited = [0] * len(dungeons) # 던전 방문 여부를 저장할 지역 배열
answer_max = dfs(k, 0, dungeons, visited) # DFS 함수 호출
return answer_max
solution 2)
더보기
import
solution 3)
더보기
import
(JavaScript)
solution 1)
- N: 던전의 개수
- 최악의 경우 모든 경로를 탐색: O(N!)
더보기
// 백트래킹을 위한 DFS
function dfs(curK, cnt, dungeons, visited) {
let answerMax = cnt;
for (let i = 0; i < dungeons.length; ++i) {
// 현재 피로도(curK)가 i번째 던전의 최소 필요 피로도보다 크거나 같고, i번째 던전을 방문한 적이 없다면
if (curK >= dungeons[i][0] && visited[i] === 0) {
visited[i] = 1;
// 현재까지의 최대 탐험 가능 던전 수와 i번째 던전에서 이동할 수 있는 최대 탐험 가능 던전 수 중 큰 값을 선택하여 업데이트
answerMax = Math.max(answerMax, dfs(curK - dungeons[i][1], cnt + 1, dungeons, visited));
visited[i] = 0;
}
}
return answerMax;
}
// 최대 탐험 간으 던전 수를 계산하는 함수
function solution(k, dungeons) {
const visited = Array(dungeons.length).fill(0); // 방문 여부를 저장할 지젹 배열
const answerMax = dfs(k, 0, dungeons, visited); // DFS 함수 호출
return answerMax;
}
solution 2)
더보기
import
solution 3)
더보기
import
반응형
'1-4. 코딩테스트 문제집(진행중) > PCCP(Lv2)' 카테고리의 다른 글
[PCCP] Lv2: 양궁대회(92342) 해설 (0) | 2024.12.25 |
---|---|
[PCCP] Lv2: N-Queen(12952) 해설 (0) | 2024.12.25 |
[PCCP] Lv2: 전력망을 둘로 나누기(86971) 해설 (0) | 2024.12.25 |
[PCCP] Lv2: 배달(12978) 해설 (0) | 2024.12.25 |
[PCCP] Lv2: 게임 맵 최단거리(1844) 해설 (0) | 2024.12.25 |