문제 : https://programmers.co.kr/learn/courses/30/lessons/43165
BFS로 풀었다.
BFS는 기본적으로 큐를 쓰는데, 파이썬은 deque를 쓰면 편하다.
이 문제는 numbers를 하나하나 더하거나 빼면서 target과 같게 할 수 있는 경우의 수를 구하는 문제다.
내가 푼 방법은 다음과 같다.
- 큐 아이템을 (현재 값, 현재까지 탐색한 위치) 로 한다.
- 처음에 [-1,0], [1,0] ( 첫번째 값의 +,- 값) 을 큐에 넣는다.
- 큐가 빌때까지:
- 탐색위치가 numbers 길이가 될 동안
- 현재 (+,-) [다음 탐색할 값] 이 target이면:
- answer+=1 한다
- 아니면 (현재 (+,-) [다음 탐색할 값] , 현재위치+1) 을 큐에 넣는다.
from collections import deque
def solution(numbers, target):
answer = 0
maxlen = len(numbers)
q = deque()
q.append((numbers[0],0))
q.append((-numbers[0],0))
while q:
cur= q.popleft()
if cur[1]+1 < maxlen:
if cur[0]+numbers[cur[1]+1] ==target and cur[1]+1 == maxlen-1:
answer+=1
else:
q.append((cur[0]+numbers[cur[1]+1] ,cur[1]+1))
if cur[0]-numbers[cur[1]+1]==target and cur[1]+1 == maxlen-1:
answer+=1
else:
q.append((cur[0]-numbers[cur[1]+1] ,cur[1]+1))
return answer
'취준 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 Programmers][Python] K번째수 (0) | 2020.02.09 |
---|---|
[프로그래머스 Programmers][Python] 더 맵게 (0) | 2020.02.09 |
[프로그래머스 Programmers][Python] 카펫 (0) | 2020.01.31 |
[프로그래머스 Programmers][Python] 문자열 내 마음대로 정렬하기 (0) | 2020.01.29 |
[프로그래머스 Programmers][Python] 땅따먹기 (0) | 2020.01.29 |