2022년 06월 11일 토요일 - 외주 같은걸 해따..? 외주 맞나
오늘 올려볼 문제는 1658번 Minimum Operations to Reduce X to Zero 이라는 문제이다.
사진을 클릭하면 해당 문제로 이동합니다.
오늘도 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;
}
}
제출 화면
문제를 풀고 discuss를 봤는데 훨씬 쉬운 방법이 있었다... 그냥 가운데 subarray의 합을 구하고 전체길이에서 빼기만 하면 됐던 것이다....
내일은 좀더 효율적으로 문제를 풀 수 있었으면 좋겠다.
내일도 문제를 풀어서 블로그에 글을 쓸 수 있으면 좋겠다.
'LeetCode 문제 풀이' 카테고리의 다른 글
[LeetCode] 120번 문제를 풀어보았다. (ft. java) (0) | 2022.06.13 |
---|---|
[LeetCode] 1695번 문제를 풀어보았다. (ft. java) (0) | 2022.06.12 |
[LeetCode] 3번 문제를 풀어보았다. (ft. java) (0) | 2022.06.10 |
[LeetCode] 1332번 문제를 풀어보았다. (ft. java) (0) | 2022.06.08 |
[LeetCode] 88번 문제를 풀어보았다. (ft. java) (0) | 2022.06.07 |