[paiza]スキルチェック見本問題 Java 指定要素があるかの判定 ・要素の種類数 continueとは (paizaランク D 相当)
初めに
今回以下の2つの問題に挑戦しました。
数日スキルチェック問題に取り組んでいないと、なんだか鈍るというか、
どういう道筋で解くのか浮かばなくなります
今回も躓きつつも、学びがありました!
①指定要素があるかの判定
配列 A の要素数 N と整数 K , 配列 A の各要素
A_1, A_2, ..., A_N が与えられるので、A に K が 1 つでも含まれている場合は
Yes を、含まれていない場合は No を出力してください。
解答
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int a[] = new int[n];
for(int i=0; i<n; i++){
a[i] = sc.nextInt();
}
for(int x:a){
if(x==k){
System.out.println("Yes");
sc.close();
return;
}
}
System.out.println("No");
sc.close();
}
}
以下の記事で解いた問題と解き方は同様ですので、
思い出しながらなんとかできました。
paizaの解答 booleanを使う
今まで使ってなかったブール型を使用して答えを導いてるようです。
拡張for文で、trueかfalse という2択のどっちかを返すように
記述しています。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = sc.nextInt();
}
//ブール型のexist をfalseにしています。falseを初期値としている。
boolean exist = false;
for (int x : a) {
//もし配列の中身と数字が等しければ、existをtrueに変える
if (x == k) {
exist = true;
}
}
if (exist) {
System.out.println("Yes");
} else {
System.out.println("No");
}
}
}
②要素の種類数
配列 A の要素数 N と配列 A の各要素 A_1, A_2, ..., A_N が与えられるので、
配列 A には何種類の値が含まれているかを求めてください。
解答
この問題は全然分かりませんでした。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = sc.nextInt();
}
//ブール型(真偽型)の配列 existを用意する。長さは0から100までの101
//真偽型の初期値はデフォルトでfalseになってる
//「整数 x は既出か」を exist[x] で判定
boolean[] exist = new boolean[101];
//count 変数は初期値0にする
int count = 0;
//拡張for文で中身全部出す
for (int x : a) {
//if (exist[x]) {が既出なら、処理をスキップする
//そうでないなら、exist[x] を trueにしcount増やす
if (exist[x]) {
continue;
}
exist[x] = true;
count += 1;
}
System.out.println(count);
}
}
ちょっと難しいので、
以下の入力例で実際に処理を見ていきます。
入力例を使用して解説
入力例
5
1
2
3
2
1
a[i] = sc.nextInt();
までの処理で、
{1,2,3,2,1}の配列が出来上がりました。
boolean[] exist = new boolean[101];
で真偽型の配列を作成します。
真偽型なので、中身は{true, false, false, true, true};みたいになります。
拡張for文内で、配列の中身を全部見ます。
真偽型のデフォルト値はfalseです。
まず、exist[1]
が既出かの判定です。true
なら処理をスキップしますが、false
なので、そのまま続きます。
↓
exist[1]
を true
にします。countを1
にします。
↓
exist[2]
も既出では無いので、false
です。処理を続けます。
↓
exist[2]
をtrue
にし、countに+1をして2
になります。
↓
exist[3]
も既出では無いので、false
です。処理を続けます。
↓
exist[3]
をtrue
にし、countに+1をして3
になります。
↓
exist[2]
です。これはtrue
になっていますので、continue;
で処理をスキップします。
↓
次にexist[1]
です。これもtrue
、continue;
で処理をスキップします。
最後に、countを出力し3になります。
continueは、それ以降の処理をスキップし次の繰り返しへ行く
continueなんて書いてあると、そのまま「続ける」のかと思うのですが、
continue 文以降の処理をスキップするんですね。
参考にした記事
終わり
Author And Source
この問題について([paiza]スキルチェック見本問題 Java 指定要素があるかの判定 ・要素の種類数 continueとは (paizaランク D 相当)), 我々は、より多くの情報をここで見つけました https://qiita.com/ki_87/items/1535ab67408f6b8651ee著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .