새소식

코딩테스트/프로그래머스

[Swift] 피로도

  • -

[문제]

코딩테스트 연습 - 피로도 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

[문제 풀이]

완전탐색을 이용해서 풀자!

1. 완전탐색을 이용해서 배열에 (0,1,2),(0,2,1)....(2,1,0) 까지를 모두 넣고

2. 반복문으로 해당 값들을 돌면서 k를 소모시키면서 최소 필요 피로도 보다 k 가 큰지 확인을 하자.

3. 그렇게 모든 경우를 돌았을때 가질 수 있는 가장 큰 경우를 반환하자.

[회고]

C++로 풀때는 어렵지 않았는데 Swift로 풀려니 벡터와 배열의 차이로 순간 헷갈렸다.

배열에 바로 값을 넣고 싶을땐 Array(repeating , count)를 사용하고 배열을 벡터처럼 초기값을 비워두고 사용할땐 그냥 [Int]()를 이용하자. 생각보다 벡터와 비슷하니 안 헷갈릴 거다.

[코드]

import Foundation

var vec = [Int]()
var visited = Array(repeating: 0, count: 12)
var answer: Int = 0
var num: Int = 0
func backTrack(_ dungeons:[[Int]]){
    
    if vec.count == dungeons.count {
        var k = num
        var count = 0
        
        for i in vec {
            if k >= dungeons[i][0] {
                k = k - dungeons[i][1]
                count += 1
            }
        }
        answer = max(answer, count)
    }
    
    for i in 0..<dungeons.count {
        if(visited[i] == 0){
            visited[i] = 1
            vec.append(i)
            backTrack(dungeons)
            vec.removeLast()
            visited[i] = 0
        }
    }
}

func solution(_ k:Int, _ dungeons:[[Int]]) -> Int {
    num = k
    backTrack(dungeons)
    
    return answer
}

 

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[Swift] 달리기 경주  (0) 2023.08.12
[C++] 달리기 경주  (0) 2023.08.12
[C++] 피로도  (0) 2023.08.09
[C++] 가장 먼 노드  (0) 2023.08.09
[Swift] 가장 먼 노드  (0) 2023.08.09
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.