-
[programmers/Swift] 피로도Archive/Questions 2022. 5. 20. 17:23728x90
programmers.co.kr - 코딩테스트연습 - Lv.2 - 위클리 챌린지 - 피로도
Constraints :
- k는 1 이상 5,000 이하인 자연수입니다.
- dungeons의 세로(행) 길이(즉, 던전의 개수)는 1 이상 8 이하입니다.
- dungeons의 가로(열) 길이는 2 입니다.
- dungeons의 각 행은 각 던전의 ["최소 필요 피로도", "소모 피로도"] 입니다.
- "최소 필요 피로도"는 항상 "소모 피로도"보다 크거나 같습니다.
- "최소 필요 피로도"와 "소모 피로도"는 1 이상 1,000 이하인 자연수입니다.
- 서로 다른 던전의 ["최소 필요 피로도", "소모 피로도"]가 서로 같을 수 있습니다.
// // Created by Yongwoo Marco on 2022/05/17. // Copyright © 2022 Yongwoo Marco Kim. All rights reserved. // func solution(_ k:Int, _ dungeons:[[Int]]) -> Int { var results = Set<Int>() func next(k: Int, left: [[Int]]) { guard k > 0 else { results.update(with: dungeons.count - left.count ) return } guard left.filter({ k >= $0[1] }).count > 0 else { results.update(with: dungeons.count - left.count ) return } for (index, dungeon) in left.enumerated() { if k >= dungeon[0], k - dungeon[1] >= 0 { var l = left l.remove(at: index) next(k: k - dungeon[1] , left: l) } } results.update(with: dungeons.count - left.count) } next(k: k, left: dungeons) return results.max() ?? 0 } print(solution(80, [[80,20],[50,40],[30,10]])) // 3
How I tried this :
직관적으로 풀었다.next() 함수에서 K가 0이거나 0보다작은수(나오면안되지만) 인 경우 현재까지 클리어 던전 갯수를 추가
남은 던전 중 현재피로도로 시도할 수 있는 던전 수 0이면 던전 갯수 추가
guard 로 탈출을 만들고
다음 던전에 모든 던전에 도전하되 조건으로 걸렀다.
최대 크기를 구하기 때문에, Set으로 중복처리를 해서 현재까지 도전한 횟수를 매번 저장했다.
다행히 2단계 수준 난이도 때문인지 통과했다.
문제에 관한 모든 저작권 : https://programmers.co.kr/
728x90'Archive > Questions' 카테고리의 다른 글
[programmers/Swift] 교점에 별 만들기 (0) 2022.05.22 [programmers/Swift] 전력망을 둘로 나누기 (0) 2022.05.21 [programmers/Swift] 다음 큰 숫자 (0) 2022.05.17 [programmers/Swift] 땅따먹기 (0) 2022.05.16 [programmers/Swift] 피보나치 수 (0) 2022.05.15