투로드
Coder ToLoad
투로드
전체 방문자
오늘
어제

블로그 메뉴

  • 홈
  • 알고리즘
  • CS
  • GITHUB
  • 태그
  • 분류 전체보기 (69)
    • Toy Project (0)
      • EternalSNS (0)
    • Algorithm (46)
      • BaekJoon (38)
      • Programmers (7)
      • Code Tree (1)
    • Computer Science (13)
      • JAVA (7)
      • DataBase (4)
    • Backend (7)
      • Spring (2)
      • JPA (2)
      • Django (3)
    • Mobile (2)
      • Android (2)
    • Unity (1)

인기 글

최근 글

hELLO · Designed By 정상우.
투로드

Coder ToLoad

Algorithm/Programmers

[JAVA] Programmers : 피로도

2022. 5. 2. 22:23

문제

 

코딩테스트 연습 - 피로도

XX게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던

programmers.co.kr

 

해결방법

오랜만에 알고리즘 풀이를 들고 왔다.

사실 알고리즘은 꾸준히 풀고 있었는데 시간도 없고 귀찮아서 글은 쓰지 않고 있었다.

 

문제에 대해 이야기하자면 기본적인 순열 문제라고 볼 수 있다.

순열을 이용해서 던전의 모든 방문 순서를 찾고 해당 방문 순서에 몇 개의 던전이 탐색 가능한지 확인한다.

그다음 그중에서 가장 많은 던전을 방문한 횟수를 출력하면 된다.

 

코드

class Solution {
    static int[] result;
    static boolean[] visited;
    static int[][] dungeons;
    static int k;
    static int max = -1;
    
    public int solution(int k, int[][] dungeons) {
        int answer = -1;
        
        this.dungeons = dungeons;
        this.k = k;
        
        int length = dungeons.length;
        result = new int[length];
        visited = new boolean[length];
        
        permu(0, length);
        answer = max;
        
        return answer;
    }
    
    static void permu(int depth, int end) {
        if (depth >= end) {
            max = Math.max(max, goDungeons());
            return;
        }
        
        for (int i = 0; i < end; i++) {
            if (!visited[i]) {
                visited[i] = true;
                result[depth] = i;
                permu(depth + 1, end);
                visited[i] = false;
            }
        }
    }
    
    static int goDungeons() {
        int count = 0;
        int startPoint = k;
        for (int i = 0; i < result.length; i++) {
            if (dungeons[result[i]][0] <= startPoint) {
                startPoint -= dungeons[result[i]][1];
                count++;
            } else break;
        }
        return count;
    }
}

 

저작자표시 (새창열림)

'Algorithm > Programmers' 카테고리의 다른 글

[JAVA] Programmers : 등산코스 정하기  (0) 2022.09.07
[JAVA] Programmers : 배달  (0) 2022.05.02
[JAVA] 행렬 테두리 회전하기  (0) 2021.05.03
[JAVA] 광고 삽입  (0) 2021.05.01
[JAVA] 합승 택시 요금  (0) 2021.04.29
    'Algorithm/Programmers' 카테고리의 다른 글
    • [JAVA] Programmers : 등산코스 정하기
    • [JAVA] Programmers : 배달
    • [JAVA] 행렬 테두리 회전하기
    • [JAVA] 광고 삽입
    투로드
    투로드
    훌륭한 프로그래머가 되어가는 과정을 담아보는 중입니다.

    티스토리툴바