2022년 2월 17일 목요일 - 오늘은 조금 일이 많아따
오늘 올려볼 문제는 39번 Combination Sum 이라는 문제이다.
사진을 클릭하면 해당 문제로 이동합니다.
오늘도 LeetCode 사이트 오늘의 문제를 가지고 왔다.
안풀릴 줄 알았는데 풀려서 놀람.. 이게 왜 풀리지?
입력
사진에서도 볼 수 있듯이 int 배열 하나와 int 값 하나가 입력으로 들어온다.
풀이 및 코드
주어진 int 배열의 원소들의 합이 target이 되는 값들의 집합을 리턴하는 문제다.
이 때 각 집합은 순서가 상관없이 원소의 개수들이 같으면 같은 집합이라고 생각한다.
위를 규칙을 통해 중복없이 모든 원소들의 집합을 구하는 문제다.
오늘은 처음부터 정답을 생각해냈지만 풀릴 줄 몰랐다.
Time Limit Exceed 가 날 줄 알았지만 풀려서 좀 놀랐다.
백트래킹을 사용해서 원소들을 고르고, index도 파라매터로 같이 넘겨서 중복이 없게끔 해서 문제를 풀었다.
이제 코드를 봐보자!
풀이코드
class Solution {
int find;
int[] arr;
Stack<Integer> s = new Stack<Integer>();
List<List<Integer>> result = new ArrayList<List<Integer>>();
public List<List<Integer>> combinationSum(int[] candidates, int target) {
arr = candidates;
find = target;
solve(0, 0);
return result;
}
public void solve(int sum, int index)
{
if(sum == find)
{
result.add(new ArrayList(s));
return;
}
if(sum > find)
return;
for(int i = index; i < arr.length; i++)
{
s.push(arr[i]);
solve(sum + arr[i], i);
s.pop();
}
}
}
제출 화면
오늘은 이게 왜 풀리지 의문을 가졌던 문제다.
아마 제약조건이 더 깐깐했다면 틀렸을 것 같은데 어쨌든 풀려서 기분은 좋았다.
내일도 문제를 풀어서 블로그에 글을 쓸 수 있으면 좋겠다.
'LeetCode 문제 풀이' 카테고리의 다른 글
[LeetCode] 1288번 문제를 풀어보았다. (ft. java) (0) | 2022.02.20 |
---|---|
[LeetCode] 343번 문제를 풀어보았다. (ft. java) (0) | 2022.02.19 |
[LeetCode] 80번 문제를 풀어보았다. (ft. java) (0) | 2022.02.16 |
[LeetCode] 136번 문제를 풀어보았다. (ft. java) (0) | 2022.02.15 |
[LeetCode] 104번 문제를 풀어보았다. (ft. java) (0) | 2022.02.14 |