LeetCode 문제 풀이

[LeetCode] 1658번 문제를 풀어보았다. (ft. java)

pantrom 2022. 6. 11. 11:47

2022년 06월 11일 토요일 - 외주 같은걸 해따..? 외주 맞나


오늘 올려볼 문제는 1658번 Minimum Operations to Reduce X to Zero 이라는 문제이다.


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

leetcode 문제 사진

오늘도 LeetCode 사이트 오늘의 문제를 가지고 왔다.

와 내가 너무 어렵게 풀었더라


입력


사진에서도 볼 수 있듯이 int 배열 1개와 int 값 1개가 입력으로 들어온다.



풀이 및 코드


오른쪽 또는 왼쪽 subarray의 합이 x가 될 수 있는 가장 작은 길이를 구하여 리턴하는 문제다.


오늘은 처음부터 정답을 생각해냈다.

HashMap에 오른쪽 합과 index를 적어두고 for문으로 순회하면서 문제를 풀었다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public int minOperations(int[] nums, int x) {
        HashMap<Integer, Integer> map = new HashMap<>();
        int sum = 0;
        
        map.put(0, 0);
        
        for(int i = 1; i <= nums.length; i++)
        {
            sum += nums[nums.length - i];
            map.put(sum, i);
        }
        
        int result = 1000000;
        
        sum = 0;
        
        if(map.containsKey(x)) result = map.get(x);
            
        for(int i = 0; i < nums.length; i++)
        {
            if(i > result) break;
            
            sum += nums[i];
            
            if(map.containsKey(x - sum) && i + 1 + map.get(x - sum) <= nums.length) result = Math.min(result, i + 1 + map.get(x - sum));
        }
        
        return result == 1000000 ? -1 : result;
    }
}




제출 화면

leetcode 문제 맞았습니다


문제를 풀고 discuss를 봤는데 훨씬 쉬운 방법이 있었다... 그냥 가운데 subarray의 합을 구하고 전체길이에서 빼기만 하면 됐던 것이다....

내일은 좀더 효율적으로 문제를 풀 수 있었으면 좋겠다.


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