[Programmers] νƒ€κ²Ÿλ„˜λ²„

Updated:

νƒ€κ²Ÿλ„˜λ²„

νƒ€κ²Ÿλ„˜λ²„ λ₯Ό ν΄λ¦­ν•˜λ©΄ λ°”λ‘œ μ΄λ™ν•œλ‹€.

DFS / BFS μΉ΄ν…Œκ³ λ¦¬μ— μžˆμ–΄μ„œ 덕뢄에 κ°œλ…λ„ λ‹€μ‹œ κ³΅λΆ€ν•˜κ³  파이썬으둜 μ½”λ”© ν•˜λŠ” 방법도 μ΅ν˜”λ‹€.


answer = 0


def DFS(nums, target, idx, sum):
	global answer
	if idx == len(nums):
		if sum == target:
			answer += 1
		return

	DFS(nums, target, idx + 1, sum + nums[idx])
	DFS(nums, target, idx + 1, sum - nums[idx])


def solution(nums, target):
	DFS(nums, target, 0, 0)
	return answer

λͺ¨λ“  경우의 수λ₯Ό λ‹€ ꡬ해 값을 비ꡐ ν•΄ μ£Όλ©΄ λœλ‹€. μ΄λ•Œ μž¬κ·€λ₯Ό μ΄μš©ν•˜λ©΄ κ°„λ‹¨ν•˜κ²Œ κ΅¬ν˜„ ν•  수 μžˆλ‹€.

문제λ₯Ό ν’€κ³  λ‹€λ₯Έ μ‚¬λžŒ μ½”λ“œλ₯Ό λ³΄λŠ”λ° μ§„μ§œ λŒ€λ‹¨ν•œ μ½”λ“œκ°€ μžˆμ–΄μ„œ μ†Œκ°œν•΄λ³Έλ‹€.

from itertools import product


def solution(numbers, target):
    _list = [(x, -x) for x in numbers]
    result = list(map(sum, product(*_list)))
    return result.count(target)

이 μ½”λ“œλ₯Ό 보고 μ§„μ§œ μ§„μ§œ μ—„μ²­ λ˜‘λ˜‘ν•˜κ³  λŒ€λ‹¨ν•˜λ‹€κ³  λŠκΌˆλ‹€..

product λŠ” 두 개 μ΄μƒμ˜ 리슀트의 λͺ¨λ“  쑰합을 λ°˜ν™˜ν•œλ‹€.

예λ₯Όλ“€μ–΄ [(1, -1), (2, -2)] λΌλŠ” 리슀트λ₯Ό product ν•œλ‹€λ©΄ [(1, 2), (1, -2), (-1, 2), (-1, -2)] μ΄λ ‡κ²Œ λ°˜ν™˜λœλ‹€.

μž…λ ₯받은 숫자λ₯Ό (+, -) 둜 λ¬Άμ–΄ 리슀트λ₯Ό λ§Œλ“€κ³  κ·Έ 리슀트λ₯Ό 가지고 λͺ¨λ“  쑰합을 λ§Œλ“€μ–΄ κ³„μ‚°ν•œλ’€ target 개수λ₯Ό μ„Ό 것이닀..


Categories:

Updated:

Leave a comment