HIT해

[Swift] 프로그래머스 - 타겟 넘버 ( DFS ) 본문

Swift/Swift 알고리즘

[Swift] 프로그래머스 - 타겟 넘버 ( DFS )

힛해 2024. 9. 9. 01:04
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/43165?language=swift

 

프로그래머스

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

programmers.co.kr

 

간단하게 2차원 배열이 아니라 1차원 배열 DFS 문제를 풀어보았다.

 

DFS란? (Depth First Search )

시작 정점의 한 방향으로 갈 수 있는 경로가 있는 곳까지 깊이 탐색해 가다가 더 이상 갈 곳이 없게 되면, 가장 마지막에 만났던 갈림길 간선이 있는 정점을 되돌아와서 다른 방향의 정점으로 탐색을 계속 반복하여 결국 모든 정점을 방문하는 순회 방법

 

자바에서 공부했던 코드를 살펴보자

정점 수 : N
인접 행렬 : adjMatrix
방문 체크 배열 : visited

private static void dfs(int current) { //curent 탐색 정점
		visited[current] = true;

		for(int i = 0; i < N; ++i){
				if(adjMatrix[acurrent][i] && !visited[i]){
						dfs(i);
						}
}

 

이제 아래의 문제를 풀어보자

 

 

 

 

 

Swift로 해결한 방식

import Foundation

func solution(_ numbers:[Int], _ target:Int) -> Int {
    
    func dfs(index : Int, currentSum : Int) -> Int{
        
        
        // 모든 숫자를 사용했으면
        if index == numbers.count{
            return currentSum == target ? 1 : 0
        }
        
        let add = dfs(index : index + 1, currentSum : currentSum + numbers[index])
        let subtract = dfs(index : index + 1, currentSum : currentSum - numbers[index])
        
        return add + subtract
        
    }
    
    return dfs(index:0, currentSum : 0)
}