-
[프로그래머스] 피로도 (위클리 챌린지 12주차) Swift알고리즘 2021. 10. 25. 13:15
문제 내용
던전 (최소 필요 피로도, 소모 피로도) 와 피로도가 주어진다.최소 필요 피로도 >= 소모 피로도 이고,피로도 >= 최소 필요 피로도 라면 그 던전을 탐험할 수 있다.그 던전을 탐험하게 되면 소모 피로도 만큼 피로도가 차감된다.최대 몇 개의 던전을 탐험할 수 있나 (각 던전은 1번만 탐험할 수 있음)
전체 코드
import Foundation func solution(_ k:Int, _ dungeons:[[Int]]) -> Int { // 1. 결과 저장용 var result = 0 // 2. 방문하는 함수 func visit(_ orders: [Int]) { // 3. 만약 orders 에 모든 값이 저장이 되었다면 if orders.count == dungeons.count { // 4. 방문 수와 피로도 값을 저장할 값들 var visitCount = 0 var visitK = k for order in orders { // 5. 만약 현재 피로도가 최소 필요 피로도보다 크거나 같다면 if dungeons[order][0] <= visitK { // 6. 값을 갱신 visitK -= dungeons[order][1] visitCount += 1 } } // 7. 결과 값에 최대값을 설정하고 종료 result = max(result, visitCount) return } // 8. 만약 orders 에 모든 값이 저장되어있지 않다면 for i in 0..<dungeons.count { // 9. 값을 찾음 if !orders.contains(i) { visit(orders + [i]) } } } // 10. 초기 visit 함수 실행 for i in 0..<dungeons.count { visit([i]) } return result }
결론
던전 탐험에 대한 모든 경우의 수를 만들고 방문하였다.던전의 수가 1 이상 8 이하이므로 시간 초과가 나지 않을거라 생각하였다.
출처 : 프로그래머스 위클리 챌린지 12주차 피로도
https://programmers.co.kr/learn/courses/30/lessons/87946
'알고리즘' 카테고리의 다른 글
[백준] 1,2,3 더하기 3 (15988번) (0) 2021.10.27 [프로그래머스] n^2 배열 자르기 (월간 코드 챌린지 시즌3) Swift (0) 2021.10.26 [프로그래머스] 교점에 별 만들기 (위클리 챌린지 10주차) Swift (0) 2021.10.14 [백준] 톱니바퀴 (14891번) Swift (0) 2021.10.12 [백준] 구슬 탈출 2 (13460번) Swift (0) 2021.10.11