第163回【Python】指定された値の個数、指定された値の位置 1
現在取り組んでいるのは、paiza ラーニング問題集「線形探索メニュー」になります。
はじめに
猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。
Python をゼロから勉強してみよう、のコーナー 163 回目です。
今回からは、定番アルゴリズムの習得から「線形探索メニュー」に挑戦しようと思います。定番アルゴリズムって問題を読めばああ、って思うけれど、線形探索って言われてもいまいちぱっとしない。これはちゃんと学習した方が良さそうです。
それでは、今日も頑張ってみようと思います。
指定された値の個数 (paizaランク D 相当)
整数 n と、数列 a_1, … , a_n と、整数 k が与えられます。
a_1, … , a_n のうち k は何個あるかを求めてください。
n
a_1 a_2 ... a_n
k
・ 1行目に、数列の長さを表す整数 n が与えられます。
・ 2行目に、数列の値 a_i が半角スペース区切りで与えられます。
・ 3行目に、整数 k が与えられます。
期待する出力
n 個の整数 a_1, … , a_n のうち k が何個あるかを出力してください。
すべてのテストケースにおいて、以下の条件をみたします。
・ 入力は全て整数
・ 1 ≦ n ≦ 1,000
・ -100 ≦ a_i ≦ 100
・ -100 ≦ k ≦ 100
入力例
5
-3 2 0 -1 2
2
出力例
2
Count でもいい気がするのだけれど、なんか正攻法? でいってみようと思う。
Python
n = int(input())
A = [int(x) for x in input().split()]
k = int(input())
cnt = 0
for a in A:
if a == k:
cnt += 1
print(cnt)
VBA
Sub sequence_search_problems_search_value_step0()
N = Cells(1, 1)
temp = Split(Cells(2, 1), " ")
k = Cells(3, 1)
Dim A()
ReDim A(N - 1)
For i = 0 To N - 1
A(i) = Val(temp(i))
Next
cnt = 0
For Each v In A
If v = k Then
cnt = cnt + 1
End If
Next
Debug.Print cnt
End Sub
指定された値の位置 1 (paizaランク D 相当)
整数 n と、数列 a_1, … , a_n と、整数 k が与えられます。
整数 k が数列の何番目にあるかを求めてください。なお、最初の要素 (a_1) を 1 番目とします。
ただし、数列に整数 k が含まれていない場合は、0 を出力してください。
また、数列に整数 k が複数含まれている場合は、数列を先頭から順に見たときに最初に現れる k が数列の何番目にあるかを求めてください。
n
a_1 a_2 ... a_n
k
・ 1行目に、数列の長さを表す整数 n が与えられます。
・ 2行目に、数列の値 a_i が半角スペース区切りで与えられます。
・ 3行目に、整数 k が与えられます。
期待する出力
整数 k が数列の何番目にあるかを出力してください。
ただし、数列に整数 k が含まれていない場合は、0 を出力してください。
また、数列に整数 k が複数含まれている場合は、数列を先頭から順に見たときに最初に現れる k が数列の何番目にあるかを出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・ 入力は全て整数
・ 1 ≦ n ≦ 1,000
・ -100 ≦ a_i ≦ 100
・ -100 ≦ k ≦ 100
入力例
5
-3 2 0 -1 2
2
出力例
2
これも、Index でいい気がするのだけれど、なんか正攻法? でいってみようと思う。
Python
n = int(input())
A = [int(x) for x in input().split()]
k = int(input())
ans = -1
for i in range(n):
if A[i] == k:
ans = i
break
print(ans+1)
VBA
Sub sequence_search_problems_search_value_step1()
N = Cells(1, 1)
temp = Split(Cells(2, 1), " ")
k = Cells(3, 1)
Dim A()
ReDim A(N - 1)
For i = 0 To N - 1
A(i) = Val(temp(i))
Next
ans = -1
For i = LBound(A) To UBound(A)
If A(i) = k Then
ans = i
Exit For
End If
Next
Debug.Print ans + 1
End Sub
最後に
メニューの名称が線形探索なので、先頭から順番に探索をしての結果を求めてみました。模範解答もこんな感じだったので、きっと正しいと信じてる。
2 問目は、最初に 0 を入れておくか、-1 を入れておいて最後に +1 を行うか、迷いました。多分、For 文の途中で値をごちゃごちゃするよりもいいのかなぁ。
引き続き、よろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません