3週目の解答


小数を作成


問題の説明


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

せいげんじょうけん

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


    numsresult[1,2,3,4]1[1,2,7,6,4]4

    きほんコード

    class Solution {
        public int solution(int[] nums) {
            int answer = -1;
    
            // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
            System.out.println("Hello Java");
    
            return answer;
        }
    }

    正しいコード

    class Solution {
        public int solution(int[] nums) {
            int answer = 0;
            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++){
                        if(isPrime(nums[i]+nums[j]+nums[k])) {
                            answer++;
                        }
                    }
                }
            }
            return answer;
        }
        
        boolean isPrime(int num){
            for(int i=2; i*i<=num; i++){
                if(num%i == 0) return false;
            }
            return true;
        }
    }

    問題を解く


    この問題を解くには2つの要点がある.
  • 回転三重複文、三つの異なる数字
  • を追加
  • 素数を求める方法
  • まず反復文を観察し,j砲口とk砲口はそれぞれ位相反復文の値+1から始まる.なぜなら、3つの異なる数字をもたらすからです.ゼロから始めれば、すでにやったことを繰り返す.例えば、[1,2,3]の和[2,1,3]は等しい.0からだと部屋番号の順番が違うだけで同じ値段なので無理です.
    2番目の積分素数を求める方法は,エラトネスのふるいを適用した.詳細はリンクで共有されます.2から欲しい数字まで、自分以外のすべての倍数を削除する方法を簡単に説明します.最後には倍数に属さない数、すなわち少数しか残っていない.isPrimeは必要な数字を受け入れ,繰り返し文で排水を除去する.残りがない場合はfalseを返します.倍数です.重複文を終了すると、trueが返されます.これは、倍数のない数、すなわち少数であるためです.isPrimeを受け入れ、trueであれば少数なので回答を増やします.
    質問リンク🔗 : 小数を作成

    自然数を配列に反転


    問題の説明


    自然数nを逆さまにして、各数字を要素の配列で返します.例えば、nが12345の場合、[5,4,3,2,1]が返される.

    せいげんじょうけん

  • nは10000000000未満の自然数です.
  • I/O例


    nreturn12345[5,4,3,2,1]

    きほんコード

    class Solution {
        public int[] solution(long n) {
            int[] answer = {};
            return answer;
        }
    }

    正しいコード

    import java.util.*;
    
    class Solution {
        public int[] solution(long n) {
            StringBuilder sb = new StringBuilder(Long.toString(n));
            String re = sb.reverse().toString();
            int[] answer = new int[re.length()];
            
            for(int i=0; i<answer.length; i++)
                answer[i] = re.charAt(i)-'0';
            
            return answer;
            
        }
    }

    問題を解く


    これは問題を解く順番です.
    1.数値を文字列に変換して反転
    2.反転文字列のサイズで配列を作成する
    3.各文字を整数に変換して答えに入れる
    まず、数値を文字列に変換します.入力した数字が長いのでLongtoString()を使用して文字列に置き換えます.次にStringBuilderを使用して文字列を反転します.
    反転文字列のサイズに基づいて、答え配列のサイズを指定します.次に、並べ替えの大きさに応じて、繰り返し文をアルファベット順に並べます.一字一字持ってくる方法はcharatです.最も重要なのは,答えの配列タイプがintであるため,char to intを行う必要がある.
  • Long.toStirng(num):長いタイプの整数を文字列に変換します.
  • StringBuilder.reverse():reverseという言葉のように文字列を反転します.
  • 質問リンク🔗 : 自然数を配列に反転

    ハザード数


    問題の説明


    正の整数xを下のスケール数にするには、xをxの桁数の和で除算する必要があります.例えば、18の桁数の和は1+8=9であり、18は9で除算されるので、18は下付き文字数となる.自然数xを入力し、xがハザード数の関数かどうかをチェックし、解を完了します.

    せいげんじょうけん

  • xは、1より大きく、10000未満の整数である.
  • I/O例


    arrreturn10true12true11false13false

    きほんコード

    class Solution {
        public boolean solution(int x) {
            boolean answer = true;
            return answer;
        }
    }

    正しいコード

    class Solution {
        public boolean solution(int x) {
            
            String str = String.valueOf(x);
            int s = 0;
            for(int i=0; i<str.length(); i++)
                s+=str.charAt(i)-'0';
            if(x%s == 0 )return true;
            else return false;
    
        }
    }

    問題を解く


    まず,ハザード数の定義を考察すると,x의 자릿수의 합으로 x가 나눠지는 수である.したがって,解題過程は大きく2つに分類できる.
  • xの桁数の和
  • 検証数字の合計をx
  • で割った
    まずxの桁数の和を求める.数字を求めるにはいろいろな方法がありますが、個人的には文字列に変換して数字を得るのが好きです.Stringはx値を文字列に変換します.valueOf()を使用しました.繰り返し文を文字列の長さで回転させ、各文字をint型に変換して追加します.各文字にcharatを使用し、charをintに変換するために「0」を削除します.
    桁数の和を求めると、xを和で割って残りの数字があるかどうかをチェックします.余っていなければ、分かれた数なのでハザード数です.
    質問リンク🔗 : ハザード数

    薬水の和


    問題の説明


    整数nを受け入れ、nのすべての約数加算値を返す関数は、解を完了してください.

    せいげんじょうけん

  • nは、3000以下の整数です.
  • I/O例


    nreturn122856

    きほんコード

    class Solution {
        public int solution(int n) {
            int answer = 0;
            return answer;
        }
    }

    正しいコード

    class Solution {
        public int solution(int n) {
            int answer = 0;
            
            for(int i=1; i<=n; i++)
                if(n%i == 0) answer+=i;
            return answer;
        }
    }

    問題を解く


    薬を求める方法は簡単です.1から要求される数まで、繰り返し回転ドアをiで割った数が約数である.その原因は、薬水はある数を分けた数であり、残りの数が0であれば、分けた数である.
    質問リンク🔗 : 薬水の和

    模擬試験


    問題の説明


    数学は数学を放棄する人の略語である.「囚人3人組」は模擬試験で数学の問題を全部撮りたいと思っている.最初の問題から最後の問題まで、執胞子は以下の通りである.
    1番捕手の撮り方:1,2,3,4,5,1,2,3,4,5...
    2番捕手の撮り方:2、1、2、3、2、4、2、5、2、2、3、2、4、2、5...
    3番捕手の撮り方:3,3,1,1,2,2,4,5,5,3,3,1,2,2,4,5,5...
    最初の問題から最後の問題までの正解が順番に並んでいる場合は、最も多くの質問に答えた人が誰なのか、答えを並べて返すように解答関数を書いてください.

    せいげんじょうけん

  • 試験は最大10000問です.
  • 質問の正解は1、2、3、4、5です.
  • 最も多くの人が得点が高い場合は、返される値を昇順に並べてください.
  • I/O例


    answersreturn[1,2,3,4,5][1][1,3,2,4,2][1,2,3]

    きほんコード

    class Solution {
        public int[] solution(int[] answers) {
            int[] answer = {};
            return answer;
        }
    }

    正しいコード

    class Solution {
        public static int[] solution(int[] answers) {
            int[] answer;
            
            int[] one = new int[]{1,2,3,4,5};
            int[] two = new int[]{2,1,2,3,2,4,2,5};
            int[] three = new int[]{3,3,1,1,2,2,4,4,5,5};
            
            int[] score = new int[3];
    
            for(int i=0; i<answers.length; i++){
                if(answers[i] == one[i%5])  score[0]++; 
                if(answers[i] == two[i%8])  score[1]++;
                if(answers[i] == three[i%10]) score[2]++;
            }
            
            int max = score[0];
            for(int i=0; i<3; i++){
                if(score[i] > max){ max = score[i]; }
            }
            
            int cnt = 0;
            for(int i=0; i<3; i++){
                if(score[i] == max){ cnt++; } 
            }
    
            answer = new int[cnt];
            int idx = 0;
            for(int i=0; i<3; i++){
                if(score[i] == max) answer[idx++] = i+1;
            }
            return answer;
        }
    }

    問題を解く


    まず、各学生の解題方法を並べます.学生たちの正解は一定の周期で繰り返されるため、正解が学生の答えと一致すれば、学生一人一人の点数が上がる.次に、点数の最高値を探します.この最価値は順番に返されるので、学生の中で最も価値のある学生が何人いるかを見つけたら、順番に大きさを宣言します.
    学生の点数が最低価格に等しい場合は、解答室に学生の番号を入れます.この場合,配列1は小さいため,i+1でなければ学生の番号に入ることができず,答え方は最値を入れるたびにインデックスを増やすので,iではなくidxを用いる.
    質問リンク🔗 : 模擬試験