티스토리 뷰
Problem
Given four integer arrays nums1, nums2, nums3, and nums4 all of length n, return the number of tuples (i, j, k, l) such that:
- 0 <= i, j, k, l < n
- nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0
Example 1:
Input: nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]
Output: 2
Explanation:
The two tuples are:
1. (0, 0, 0, 1) -> nums1[0] + nums2[0] + nums3[0] + nums4[1] = 1 + (-2) + (-1) + 2 = 0
2. (1, 1, 0, 0) -> nums1[1] + nums2[1] + nums3[0] + nums4[0] = 2 + (-1) + (-1) + 0 = 0
Example 2:
Input: nums1 = [0], nums2 = [0], nums3 = [0], nums4 = [0]
Output: 1
Constraints:
- n == nums1.length
- n == nums2.length
- n == nums3.length
- n == nums4.length
- 1 <= n <= 200
- -2^28 <= nums1[i], nums2[i], nums3[i], nums4[i] <= 2^28
Solution
길이가 n인 네 개의 정수 배열이 주어질 때 다음 조건을 만족하는 튜플의 갯수를 반환하는 문제입니다.
- 0 <= i, j, k, l < n
- nums1[i] + nums1[j] + nums1[k] + nums1[l] = 0
import java.util.HashMap;
import java.util.Map;
public class Solution {
public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
Map<Integer, Integer> map = new HashMap<>();
int result = 0;
for (int i : nums1) { // (1)
for (int j : nums2) {
int sum = i + j;
map.put(sum, map.getOrDefault(sum, 0) + 1);
}
}
for (int i : nums3) { // (2)
for (int j : nums4) {
int sum = i + j;
if (map.containsKey(-sum)) {
result += map.get(-sum);
}
}
}
return result;
}
}
- nums1, nums2 배열을 순차적으로 탐색하면서 합을 맵에 저장합니다. 합이 키, 합이 나타나는 빈도수가 값 입니다.
- nums3, nums4 배열을 순차적으로 탐색하면서 합의 부호를 바꿔서 해당 키가 존재한다면 현재 sum과의 합이 0이된다는 뜻이고 그 합을 이뤘던 조합의 갯수만큼 반환할 튜플의 갯수가 증가하게 됩니다.
Test
package io.lcalmsky.leetcode._4sum_ii;
import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
class SolutionTest {
@Test
void testAll() {
assertAll(
() -> test(new int[]{1, 2}, new int[]{-2, -1}, new int[]{-1, 2}, new int[]{0, 2}, 2),
() -> test(new int[]{0}, new int[]{0}, new int[]{0}, new int[]{0}, 1)
);
}
private void test(int[] nums1, int[] nums2, int[] nums3, int[] nums4, int expected) {
// when
Solution solution = new Solution();
int actual = solution.fourSumCount(nums1, nums2, nums3, nums4);
// then
assertEquals(expected, actual);
}
}
'Algorithm > LeetCode' 카테고리의 다른 글
104. Maximum Depth of Binary Tree (0) | 2022.02.20 |
---|---|
560. Subarray Sum Equals K (0) | 2022.02.19 |
23. Merge k Sorted Lists (0) | 2022.02.17 |
525. Contiguous Array (0) | 2022.02.16 |
258. Add Digits (0) | 2022.02.15 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 스프링 데이터 jpa
- 클린 아키텍처
- spring boot app
- 스프링 부트
- intellij
- Spring Data JPA
- proto3
- 스프링 부트 애플리케이션
- Spring Boot JPA
- 함께 자라기 후기
- r
- 헥사고날 아키텍처
- gRPC
- Spring Boot
- 스프링 부트 회원 가입
- 함께 자라기
- QueryDSL
- Spring Boot Tutorial
- JPA
- spring boot jwt
- spring boot application
- 알고리즘
- @ManyToOne
- leetcode
- Java
- Linux
- 스프링 부트 튜토리얼
- JSON
- 스프링부트
- Jackson
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함