2022년 2월 17일 목요일 - 오늘은 조금 일이 많아따


오늘 올려볼 문제는 39번 Combination Sum 이라는 문제이다.


사진을 클릭하면 해당 문제로 이동합니다.

leetcode 문제 사진

오늘도 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 문제 맞았습니다


오늘은 이게 왜 풀리지 의문을 가졌던 문제다.

아마 제약조건이 더 깐깐했다면 틀렸을 것 같은데 어쨌든 풀려서 기분은 좋았다.


내일도 문제를 풀어서 블로그에 글을 쓸 수 있으면 좋겠다.

+ Recent posts