코린이의 소소한 공부노트

[LeetCode/Easy] 2605. Form Smallest Number From Two Digit Arrays 본문

코딩테스트 풀이/JAVA

[LeetCode/Easy] 2605. Form Smallest Number From Two Digit Arrays

무지맘 2023. 5. 6. 17:20

1. Input

1) int[] nums1

2) int[] nums2

 

2. Output

1) 각 배열에 있는 수를 1개씩 골라서 만들 수 있는 수 중 가장 작은 수를 반환

 

3. Constraint

1) 1 <= nums1.length, nums2.length <= 9

2) 1 <= nums1[i], nums2[i] <= 9

3) 각 배열에는 중복 요소가 없다.

 

4. Example

Input: nums1 = [4,1,3], nums2 = [5,7] -> Output: 15

Input: nums1 = [3,5,2,6], nums2 = [3,1,7] -> Output: 3

설명:

- nums1에서는 1, nums2에서는 5를 골라 15를 만든다.

- nums1nums2 모두 3을 포함하고 있기 때문에 3을 고르면 양쪽 배열 모두에서 숫자를 고른 것이 되므로 가장 작은 수는 3이 된다.

 

5. Code

1) 첫 코드(2023/05/06)

class Solution {
    public int minNumber(int[] nums1, int[] nums2) {
        HashSet<Integer> s1 = new HashSet<>();
        int min1 = nums1[0];
        for(int i : nums1){
            s1.add(i);
            if(min1>i) min1 = i;
        }
        HashSet<Integer> s2 = new HashSet<>();
        int min2 = nums2[0];
        for(int i : nums2){
            s2.add(i);
            if(min2>i) min2 = i;
        }
        s1.retainAll(s2);
        if(s1.size()!=0){
            List<Integer> list = new ArrayList<Integer>(s1);
            list.sort(Comparator.naturalOrder());
            return list.get(0);
        }
        return 10*Math.min(min1,min2) + Math.max(min1,min2);
    }
}

2) 성능이 너무 구려서 다시 해본 코드(2023/05/06)

class Solution {
    public int minNumber(int[] nums1, int[] nums2) {
        ArrayList<Integer> list = new ArrayList<>();
        int min1 = nums1[0];
        for(int i:nums1){
            list.add(i);
            if(min1>i) min1 = i;
        }
        int min2 = nums2[0], min3 = Integer.MAX_VALUE;
        for(int i:nums2){
            if(min2>i) min2 = i;
            if(list.contains(i)) min3 = Math.min(min3, i);
        }
        if(min3!=Integer.MAX_VALUE)
            return min3;
        else
            return 10*Math.min(min1,min2) + Math.max(min1,min2);
    }
}

- 훨씬 낫다.