[プログラマ]小数-Java,Javaの作成


難易度


レベル1

質問する


https://programmers.co.kr/learn/courses/30/lessons/12977

に答える


与えられた数の中から3つを選ぶ->インバーストレースによるアクセス
問題の採点速度は少し遅いが、答えは正しい.
1級ですが、複雑に考えているようなので、他の解答を探して、for文で簡単に3つの数を求める方法を知りました.
1級で難しく考えすぎず、簡単な方法で問題を解決する方法を育てましょう.

コード#コード#


1)for文で3つの数の和を求める
import java.util.*;
class Solution {
    public int sum;
    public int answer = 0;

    public int solution(int[] nums) {
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                for (int k = j + 1; k < nums.length; k++) {
                    System.out.println(nums[i] + " " + nums[j] + " " + nums[k]);
                    int num = nums[i] + nums[j] + nums[k];
                    if (isPrime(num)) {
                        answer++;
                    }
                }
            }

        }
   
        return answer;
    }

    public boolean isPrime(int x) {
        if (x == 0 || x == 1) {
            return false;
        }
        for (int i = 2; i <= Math.sqrt(x); i++) {
            if (x % i == 0)
                return false;
        }
        return true;
    }
}
1)遡及により3つの数の和を求める
import java.util.*;
class Solution {
    public boolean[] visit;
    public int[] arr;
    public int sum;
    public int answer = 0;

    public int solution(int[] nums) {

        visit=new boolean[nums.length];
        arr = new int[3];
        dfs(0,nums,0);

        return answer;
    }

    public void dfs(int depth, int[] nums, int start) {
        if (depth == 3) {
            for (int val : arr) {
                sum += val;
            }
            System.out.println(sum);
            if (isPrime(sum)) {
                answer++;
            }

            sum = 0;
            return;
        }
        for (int i = start; i < visit.length; i++) {
            if (!visit[i]) {
                visit[i] = true;
                arr[depth] = nums[i];
                dfs(depth + 1, nums, i);
                visit[i] = false;
            }
        }
    }

    public boolean isPrime(int x) {
        if (x == 0 || x == 1) {
            return false;
        }
        for (int i = 2; i <= Math.sqrt(x); i++) {
            if (x % i == 0)
                return false;
        }
        return true;
    }
}