[programmers] 플로도 - Java

XX게임의 플로도 시슀템에서 유저가 탐험할 수 있는 최대 던전 수륌 반환하는 묞제륌 핎결하Ʞ 위핎, 깊읎 우선 탐색(DFS)륌 사용하는 알고늬슘읎 제시되었습니닀. 각 던전의 "최소 필요 플로도"와 "소몚 플로도"륌 고렀하여, 현재 플로도가 충분하고 아직 탐험하지 않은 던전을 탐색하며, 탐색읎 끝난 던전은 닀시 탐색하지 않은 상태로 변겜합니닀. 읎 곌정을 반복하며 탐험한 던전의 최대 수륌 계산합니닀.
DriedPollack's avatar
Mar 20, 2024
[programmers] 플로도 - Java

플로도

묞제 섀명

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입니닀.

※ 공지 - 2022년 2월 25음 테슀튞쌀읎슀가 추가되었습니닀.

solution.java

import java.util.*; class Solution { public int answer; public boolean[] visited; public int solution(int k, int[][] dungeons) { visited = new boolean[dungeons.length]; dfs(0, k, dungeons); return answer; } public void dfs(int depth, int k, int[][] dungeons) { for (int i = 0; i < dungeons.length; i++) { if (!visited[i] && dungeons[i][0] <= k) { visited[i] = true; dfs(depth + 1, k - dungeons[i][1], dungeons); visited[i] = false; } } answer = Math.max(answer, depth); } }
 

핵심 킀워드

  • 최대 탐색 수륌 닎을 변수와 각 던전을 현재 탐색한 상태읞지 나타낮는 배엎을 선얞한닀.
  • 현재 깊읎와 현재 플로도륌 파띌믞터로 dfs 메서드륌 싀행한닀.
    • 첫 번짞 던전부터 방묞하며 만앜 핎당 던전을 탐색한 상태가 아니고, 현재 플로도가 방묞한 던전의 필요 플로도볎닀 같거나 작은 겜우, 닀음곌 같읎 진행된닀.
      • 던전을 탐색한 것윌로 표시하고, 깊읎륌 업데읎튞하고, 던전에서 소몚한 플로도만큌 낚은 플로도륌 감소시킀고, dfs륌 재귀적윌로 혞출핎서 추가적읞 분Ʞ륌 탐색한닀.
      • 핎당 분Ʞ의 탐색읎 끝나멎 탐색했던 던전을 탐색하지 않은 던전윌로 바Ꟍ닀.
    • 현재 깊읎와 최대 탐색 수륌 비교핎서 더 큰 값을 최대 탐색 수로 저장한닀.
 

ê²°ë¡ !

처음 묞제륌 접했을 때 dfs륌 활용하는 묞제임을 파악하지 못핎 알고늬슘 구성에 얎렀움을 겪었닀.
 
Share article

More articles

See more posts

👚🏻‍💻DriedPollack's Blog