Devtraces
개발자취
Devtraces
전체 방문자
오늘
어제
  • 분류 전체보기
    • Baekjoon
    • Programmers

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Matrix
  • union-find
  • Queue
  • dfs
  • Kakao
  • level2
  • floyd-warshall
  • sort
  • DP
  • binary search
  • stack
  • math
  • two pointer
  • 그리디 알고리즘
  • map
  • level4
  • java
  • prime number
  • Trie
  • programmers
  • BFS
  • Tree
  • 백준
  • GCD
  • PriorityQueue
  • greedy
  • Dijkstra
  • recursive
  • level3
  • Set

최근 댓글

최근 글

티스토리

Devtraces
Programmers

[프로그래머스 Level.2] 피로도 (완전탐색) (Java)

[프로그래머스 Level.2] 피로도 (완전탐색) (Java)
Programmers

[프로그래머스 Level.2] 피로도 (완전탐색) (Java)

2022. 12. 13. 18:42

문제 링크

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

 

프로그래머스

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

programmers.co.kr

 

 

 

 

코딩테스트 연습 > 완전탐색 > 피로도

 

 

 

문제 설명

 

XX게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던전 탐험을 마쳤을 때 소모되는 "소모 피로도"가 있습니다. "최소 필요 피로도"는 해당 던전을 탐험하기 위해 가지고 있어야 하는 최소한의 피로도를 나타내며, "소모 피로도"는 던전을 탐험한 후 소모되는 피로도를 나타냅니다. 예를 들어 "최소 필요 피로도"가 80, "소모 피로도"가 20인 던전을 탐험하기 위해서는 유저의 현재 남은 피로도는 80 이상 이어야 하며, 던전을 탐험한 후에는 피로도 20이 소모됩니다.

 

이 게임에는 하루에 한 번씩 탐험할 수 있는 던전이 여러개 있는데, 한 유저가 오늘 이 던전들을 최대한 많이 탐험하려 합니다. 유저의 현재 피로도 k와 각 던전별 "최소 필요 피로도", "소모 피로도"가 담긴 2차원 배열 dungeons 가 매개변수로 주어질 때, 유저가 탐험할수 있는 최대 던전 수를 return 하도록 solution 함수를 완성해주세요.

 

 

 

제한사항
  • k는 1 이상 5,000 이하인 자연수입니다.
  • dungeons의 세로(행) 길이(즉, 던전의 개수)는 1 이상 8 이하입니다.
    • dungeons의 가로(열) 길이는 2 입니다.
    • dungeons의 각 행은 각 던전의 ["최소 필요 피로도", "소모 피로도"] 입니다.
    • "최소 필요 피로도"는 항상 "소모 피로도"보다 크거나 같습니다.
    • "최소 필요 피로도"와 "소모 피로도"는 1 이상 1,000 이하인 자연수입니다.
    • 서로 다른 던전의 ["최소 필요 피로도", "소모 피로도"]가 서로 같을 수 있습니다.

 

입출력 예
k dungeons result
80 [[80,20],[50,40],[30,10]] 3

 

 

입출력 예 설명

 

현재 피로도는 80입니다.

 

만약, 첫 번째 → 두 번째 → 세 번째 던전 순서로 탐험한다면

  • 현재 피로도는 80이며, 첫 번째 던전을 돌기위해 필요한 "최소 필요 피로도" 또한 80이므로, 첫 번째 던전을 탐험할 수 있습니다. 첫 번째 던전의 "소모 피로도"는 20이므로, 던전을 탐험한 후 남은 피로도는 60입니다.
  • 남은 피로도는 60이며, 두 번째 던전을 돌기위해 필요한 "최소 필요 피로도"는 50이므로, 두 번째 던전을 탐험할 수 있습니다. 두 번째 던전의 "소모 피로도"는 40이므로, 던전을 탐험한 후 남은 피로도는 20입니다.
  • 남은 피로도는 20이며, 세 번째 던전을 돌기위해 필요한 "최소 필요 피로도"는 30입니다. 따라서 세 번째 던전은 탐험할 수 없습니다.

 

만약, 첫 번째 → 세 번째 → 두 번째 던전 순서로 탐험한다면

  • 현재 피로도는 80이며, 첫 번째 던전을 돌기위해 필요한 "최소 필요 피로도" 또한 80이므로, 첫 번째 던전을 탐험할 수 있습니다. 첫 번째 던전의 "소모 피로도"는 20이므로, 던전을 탐험한 후 남은 피로도는 60입니다.
  • 남은 피로도는 60이며, 세 번째 던전을 돌기위해 필요한 "최소 필요 피로도"는 30이므로, 세 번째 던전을 탐험할 수 있습니다. 세 번째 던전의 "소모 피로도"는 10이므로, 던전을 탐험한 후 남은 피로도는 50입니다.
  • 남은 피로도는 50이며, 두 번째 던전을 돌기위해 필요한 "최소 필요 피로도"는 50이므로, 두 번째 던전을 탐험할 수 있습니다. 두 번째 던전의 "소모 피로도"는 40이므로, 던전을 탐험한 후 남은 피로도는 10입니다.

 

따라서 이 경우 세 던전을 모두 탐험할 수 있으며, 유저가 탐험할 수 있는 최대 던전 수는 3입니다.

 

 

 

 

 

나의 코드

class Solution {
    int answer = 0;
    boolean[] visited;
    public int solution(int k, int[][] dungeons) {
        visited = new boolean[dungeons.length];
        
        dfs(dungeons, k, 0);
        
        return answer;
    }
    
    // 완전 탐색 - 순열(Permutation)
    public void dfs(int[][] dungeons, int k, int depth) {
        for(int i=0; i<dungeons.length; i++) {
            if(k >= dungeons[i][0] && !visited[i]) {
                visited[i] = true;
                dfs(dungeons, k-dungeons[i][1], depth+1);
                visited[i] = false;
            }
        }
        
        answer = Math.max(answer, depth);
    }
    
}

 

풀이

  1. 던전의 수가 최대 8개 밖에 되지 않기 때문에 완전 탐색 알고리즘을 이용하여 풀면 된다.
  2. 방문 했는지 체크하기 위해 visited 배열을 생성하고 dfs를 활용하여 모든 경우의 수를 체크한다.
  3. 모든 경우의 수에서 방문 한 던전수를 answer와 비교하여 최대일 때로 갱신한다.

 

 

'Programmers' 카테고리의 다른 글

[프로그래머스 Level.2] 더 맵게 (힙(Heap)) (Java)  (2) 2022.12.14
[프로그래머스 Level.2] 타겟 넘버 (깊이/너비 우선 탐색(DFS/BFS)) (Java)  (0) 2022.12.14
[프로그래머스 Level.2] 스킬트리 (Summer/Winter Coding(~2018)) (Java)  (0) 2022.12.13
[프로그래머스 Level.2] 위장 (해시) (Java)  (0) 2022.12.13
[프로그래머스 Level.2] 튜플 (2019 카카오 개발자 겨울 인턴십) (Java)  (0) 2022.12.13
  • 문제 링크
  • 코딩테스트 연습 > 완전탐색 > 피로도
  • 나의 코드
  • 풀이
'Programmers' 카테고리의 다른 글
  • [프로그래머스 Level.2] 더 맵게 (힙(Heap)) (Java)
  • [프로그래머스 Level.2] 타겟 넘버 (깊이/너비 우선 탐색(DFS/BFS)) (Java)
  • [프로그래머스 Level.2] 스킬트리 (Summer/Winter Coding(~2018)) (Java)
  • [프로그래머스 Level.2] 위장 (해시) (Java)
Devtraces
Devtraces

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.