본문 바로가기

CS Study/Algorithm(Coding Test)

[Programmers] 타겟 넘버 (Python)

728x90
반응형
 

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

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

programmers.co.kr

 

 

예전에 풀었던 BFS / DFS를 오랜만에 다시 풀어봤다!

주어진 숫자로 타겟 넘버를 만드는 방법이 몇가지 있는지 세보는 문제이다.

이때 주어진 숫자의 순서는 바꿀 수가 없다!

 

방법은 간단하다.

앞에서부터 순서대로 더하거나 빼는 케이스를 해보고, 타겟 넘버가 되는 케이스를 세어주면 된다.

 

1) BFS 풀이

def bfs(start) :
    answer = 0
    q = deque([])
    q.append((numbers[start], start))
    q.append((-numbers[start], start))
    while q :
        result, index = q.popleft()
        if index == len(numbers)-1 :
            if result == target :
                answer += 1
        else :
            index += 1
            q.append((result + numbers[index], index))
            q.append((result - numbers[index], index))
    return answer
    answer = bfs(0)

 

 

2) DFS 풀이

def dfs(result, idx) :
    answer = 0
    if idx == len(numbers)-1 :
        if result == target :
            answer += 1
    else :
        idx += 1
        answer += dfs(result+numbers[idx], idx)
        answer += dfs(result-numbers[idx], idx)
    return answer
    
    answer = dfs(0, -1)

 

 

728x90
반응형