小数を作成


問題の説明


与えられた数字のうち3つの数字を小数に加算すると、個数を求めてみます.数値を持つ配列numsをパラメータとする場合は、solution関数を完了してnumsの3つの異なる数値の小数を返します.

せいげんじょうけん

  • numsに含まれる数字は3つまたは50個を超えない.
  • numsの各要素は1000より大きい自然数であり、重複する数字は含まれていない.
  • I/O例

    nums		result
    [1,2,3,4]	1
    [1,2,7,6,4]	4

    私のコメント(JAVA)

    import java.util.ArrayList;
    
    class Solution {
        public int solution(int[] nums) {
            int answer = 0;
            
            ArrayList<Integer> arr = new ArrayList<>();
            for (int i=0; i<nums.length-2; i++) {
                for (int j=i+1; j<nums.length-1; j++) {
                    for (int k=j+1; k<nums.length; k++) {
                        arr.add(nums[i]+nums[j]+nums[k]);
                    }
                }
            }
            
            for (int a : arr) {
                boolean flag = true;
                
                for (int i=2; i<=Math.sqrt(a); i++) {
                    if (a%i == 0) {
                        flag = false;
                        break;
                    }
                }
                
                if (flag) answer++;
            }
            
            return answer;
        }
    }

    他の人の解答(JAVA)

    import java.util.Arrays;
    
    class Solution {
        public int solution(int[] nums) {
            int answer = 0;
            
            for (int i=0; i<nums.length-2; i++) {
                for (int j=i+1; j<nums.length-1; j++) {
                    for (int k=j+1; k<nums.length; k++) {
                        if (isPrime(nums[i]+nums[j]+nums[k])) {
                            answer++;
                        }
                    }
                }
            }
            
            return answer;
        }
        
        public Boolean isPrime(int num) {
            int cnt = 0;
            
            for (int i=1; i<=(int)Math.sqrt(num); i++) {
                if (num%i == 0) cnt++;
            }
            
            return cnt == 1;
        }
    }