2020년/코테
[코테 연습] 타겟 넘버 Python
위지원
2020. 6. 9. 12:15
일주일동안 뭐하고 산거냐 위지원!!!!!!!!! 정신안차려!!!
문제 설명
n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다.
-1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+1-1+1 = 3 +1+1+1+1-1 = 3
사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요.

cnt = 0
def solution(numbers, target):
n = len(numbers)
calRes = [1 for _ in range(n)]
def cal(resArr, idx):
if idx < len(resArr):
resArr[idx] *= 1
cal(resArr, idx + 1) #계속 탐색하게 하고,,
resArr[idx] *= -1
cal(resArr, idx + 1)
else: #하나의 탐색이 끝났을 땐 count를 올려주고,,
if sum(resArr) == target:
global cnt #cnt를 solution 함수 안에서 선언 했으면 nonlocal로 ㄱㄱ
cnt += 1
cal(calRes, 0)
return cnt
예제에서 주어진 케이스는 통과했다.. 헌데

????????????????
n개의 음이 아닌 정수가 있습니다.
또 문제 제대로 안읽었다.. 하 그냥 뛰어내려야지
calRes = [i for i in numbers]
이 부분만 변경했다. 통과 ,,
고득점의 비결은,, 문제를 꼼꼼히 읽는데서 시작한Da,..
근데 +1과 -1을 바꾸어주는 곳의 위치가 변경되면 결과가 다르게 나온다
- +1을 먼저 위치하고 recursive를 한 경우 => 5
- -1을 먼저 위치하고 recursive를 한 경우 => 2
resArr[idx] *= - 1
cal(resArr, idx + 1)
resArr[idx] *= 1
cal(resArr, idx + 1)
==> 2
resArr[idx] *= 1
cal(resArr, idx + 1)
resArr[idx] *= - 1
cal(resArr, idx + 1)
==> 5
입력값 〉 | [1, 1, 1, 1, 1], 3 |
기댓값 〉 | 5 |
실행 결과 〉 | 실행한 결괏값 2이(가) 기댓값 5와(과) 다릅니다. |

아,, -1을 처음에 곱해버리믄 맨 앞 정수가 -가 되는데 그러면 +1을 아무리 곱해도 계속 -정수로 남아있어서 그런건가..! 결과를 출력했을 때 보면 그렇다 앞에가 처음에 -1로 시작하니까 끝날때까지 -1이다. 이해력 딸리는 위지원이 또 ,,
