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)
}