Archive/Questions

[programmers/Swift] 타겟 넘버

Marco 2022. 5. 10. 20:06
728x90

programmers.co.kr - 코딩테스트연습 - Lv.2 - DFS/BFS - 타겟 넘버

 

코딩테스트 연습 - 타겟 넘버

n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수

programmers.co.kr

Constraints :

  • 주어지는 숫자의 개수는 2개 이상 20개 이하입니다.
  • 각 숫자는 1 이상 50 이하인 자연수입니다.
  • 타겟 넘버는 1 이상 1000 이하인 자연수입니다.

 

Solution.swift :

//
//  Created by Yongwoo Marco on 2022/05/09.
//  Copyright © 2022 Yongwoo Marco Kim. All rights reserved.
//

func solution(_ numbers:[Int], _ target:Int) -> Int {
    var count = 0
    
    func searchByDFS(depth: Int, value: Int) {
        guard depth != numbers.count else {
            if target == value {
                count += 1
            }
            return
        }
        searchByDFS(depth: depth + 1, value: value + numbers[depth])
        searchByDFS(depth: depth + 1, value: value - numbers[depth])
    }
    
    searchByDFS(depth: 0, value: 0)
    
    return count
}

print(solution([1, 1, 1, 1, 1], 3)) // 5
print(solution([4, 1, 2, 1], 4)) // 2

How I tried this :
주어진 배열을 모두 연산해야하고 + 또는 - 두가지만 구별하면 되기 때문에

DFS 형태로 모든 배열 요소의 연산이 끝날때까지 타고 들어가도록 구현

depth 즉 배열요소의 인덱스가 끝까지 도달하면 함수를 마치고, 타겟과 같은지 비교해서 같으면 경우의 수를 하나 추가

문제에 관한 모든 저작권 : https://programmers.co.kr/

728x90