✅ 문제를 풀다가 그냥 한번 적어보고 싶어서..
난이도 자체는 크게 어렵지는 않았는데, 알고리즘을 놓은지 오래되어서 머릿속으로 설계가 되어도 코드를 어떻게 짜야하는지 감이 잡히지가 않았다 ㅜㅜ
게다가 언어도 C -> Python3 -> Swift5로 변경해서, 쉽게 떠오르지가 않았음.
결국 그림을 그리면서 어떻게 할지 설계를 했었는데
✅ 코드
//
// File.swift
// algorithm
//
// Created by Hamlit Jason on 2021/08/08.
//
/* 타겟넘버
https://programmers.co.kr/learn/courses/30/lessons/43165
DFS 사용
*/
import Foundation
var ans = 0;
func solution(_ numbers:[Int], _ target:Int) -> Int {
dfs(numbers, target, 0, 0)
return ans
}
func dfs(_ numbers: [Int],_ target : Int,_ sum : Int,_ idx : Int) {
if (idx >= numbers.count) {
if(sum==target) {
ans+=1
}
return
}
dfs(numbers, target, sum+numbers[idx], idx+1)
dfs(numbers, target, sum-numbers[idx], idx+1)
}
//print(solution([1, 1, 1, 1, 1], 3))
여기서 내가 헷갈렸던 부분이 divide and conquer(분할정복) 방식에 사로잡혀서, return시 위로 올라가서 또 다른 계산을 진행해야한다고 생각했었는데, 최종에 다다르기 까지 sum값을 계속 계산하며 if에서 return될경우 바로 solution쪽으로 이동하여 값을 산출하게 된다.
이런 방식으로 진행된다. 그리고 최종적으로 값을 다 구한 뒤에 ans값을 반환하여 답을 찾게 된다.
'알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스] 60057 문자열 압축 Swift (0) | 2021.11.15 |
---|---|
[프로그래머스] Swift 위장 - 42578 (0) | 2021.11.03 |
[프로그래머스] Swift 숫자 문자열과 영단어 (81301) (0) | 2021.10.29 |
[프로그래머스] 조이스틱 Swift (Greedy) (0) | 2021.08.08 |
Swift5 코테 공부 사전설정 (0) | 2021.08.06 |