[C#] 타겟 넘버
2020. 9. 10. 14:29ㆍ[C#] 코딩테스트 문제풀이
반응형
프로그래머스 문제
문제 설명
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 함수를 작성해주세요.
제한사항
- 주어지는 숫자의 개수는 2개 이상 20개 이하입니다.
- 각 숫자는 1 이상 50 이하인 자연수입니다.
- 타겟 넘버는 1 이상 1000 이하인 자연수입니다.
내 풀이(다른 분 코드 참고)
using System;
public class Solution {
static int Dfs(int[] arr, int target, int idx, int num)
{
if (idx == arr.Length)
{
if (target == num) return 1;
else return 0;
}
else
return Dfs(arr, target, idx + 1, num + arr[idx]) +
Dfs(arr, target, idx + 1, num - arr[idx]);
}
public int solution(int[] numbers, int target) {
int answer = 0;
return Dfs(numbers, target, 0, 0);
}
}
느낀점: 굉장히 어려웠다. 우선 깊이/넓이 우선 탐색 알고리즘의 개념이 제대로 잡혀있지 않은 상태여서 더 어려웠던 것 같다.
배열에 타겟 넘버와 같은 숫자가 있는 지를 우선 탐색한 후 없다면 그 뒤 다른 배열들을 더하거나 빼가며
타겟 넘버와 같은 숫자로 만들어준다.
다른 분의 코드를 참고해가며 풀었는데 아직 내 것으로 확실하게 만들지 못한 느낌이 든다. 비슷한 유형의 문제를 더 풀어봐야겠다.
반응형
'[C#] 코딩테스트 문제풀이' 카테고리의 다른 글
[C#] H-Index (정렬) (0) | 2020.09.10 |
---|---|
[C#] 위장 (Dictionary) (0) | 2020.09.10 |
[C#] 올바른 괄호 (0) | 2020.09.01 |
[C#] (2진수)다음 큰 숫자 (0) | 2020.09.01 |
[C#] List 주요 함수 정리 (0) | 2020.09.01 |