알고리즘 - 타켓 넘버(프로그래머스)

hee·2022년 12월 6일
0

알고리즘

목록 보기
7/10

타켓 넘버(프로그래머스)

이 문제는 n개의 정수들로 이루어진 리스트 형태의 numbers 가 주어지고 이 요소들을 순서를 바꾸지 않고 +,-를 이용해 주어지는 target과 값이 같아지는 경우의 수를 구하는 문제 입니다. 저는 BFS로 queue를 이용해 문제를 해결 하였습니다.

from collections import deque 
def solution(numbers, target): 
    answer = 0 # target과 같이 같은 경우의 수의 개수 
    k = len(numbers) # 입력되는 리스트의 길이
    index  = 0 # 인덱스 값 
    queue = deque() # deque을 이용해 queue를 만들기 
     # 첫번째 인덱스 +,- 한 이후 index와 함께 저장 
    queue.append([numbers[index],index]) 
    queue.append([-numbers[index],index])

    while queue:
        temp,index = queue.popleft() # 하나씩 꺼내기
        index+=1
        if index < k: # numbers보다 작다면 꺼내기
            queue.append([temp+numbers[index],index])
            queue.append([temp-numbers[index],index])
        elif temp == target: # 꺼낸 temp와 target이 같다면 +1
            answer+=1
    return answer

queue를 이용해 하나씩 꺼내며 인덱스를 하나씩 방문하여 꺼낸 값과 다음 인덱스 값을 +,-한 값을 저장하며 끝 인덱스까지 반복하고 index값이 numbers의 길이보다 커지면 더이상 반복하지 않고 queue를 꺼내며 꺼낸값과 target값과 같다면 경우의 수 answer을 +1 해줍니다.

DFS,BFS 기초 공부를 하고 연습문제를 직접 풀어보고 어느정도 이해를 했다고 생각하고 프로그래머스에 있는 DFS,BFS 관련 문제를 풀어보기로 했습니다. 막상 문제를 풀려고 하니까 어떻게 해야하지 좀 막막했던것 같습니다.
DFS,BFS 관련 문제를 많이 풀어보고 경험해봐야 익숙해질것 같다는 생각이 들어 더 열심히 공부해야겠다는 생각이 들었습니다.

0개의 댓글

관련 채용 정보