第13回【Python】加算された数列の最大値、加算された数列の最小値、1 はどこにある?
現在取り組んでいるのは、paiza ラーニング問題集「ループメニュー 2」になります。
はじめに
猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。
Python をゼロから勉強してみよう、のコーナー 13 回目です。
LunaSaki(嫁)の誕生日が 13 日なので、12 続いて、13 という数字も好き。欧米では忌み嫌われる数字というイメージですが、ここはジャパーン。LunaSaki(嫁)の誕生日が金曜日であっても気にしない。だって、ここはジャパーン。
それでは、今日も頑張ってみようと思います。
加算された数列の最大値
N 個の整数 a_1, a_2, …, a_N が与えられます。
a_i に i を足したとき、a_1 , … , a_N の最大値を出力してください。
ちょっと分かりづらい問題だけれども。1 番目の数字に 1 を足す、2 番目の数字に 2 を足す、3 番目の数字に 3 を足す・・・で、その中で最大値を求める、ってことでしょうかね。
Python
N = int(input())
A = list(map(int,input().split()))
for i in range(N):
A[i] += i + 1
print(max(A))
書いてから思ったのが、これは計算量が多すぎる。リストを 2 回攫わないといけない。
Python
N = int(input())
A = list(map(int,input().split()))
ans = 0
for i in range(N):
ans = max(ans, A[i] + (i + 1))
print(ans)
加算しながら比較を行えば、最初の 1 回で済む。
VBA でも同じ感じに書けるかな?
VBA
N = Cells(1, 1)
A = Split(Cells(2, 1), " ")
ans = 0
For i = 0 To UBound(A)
ans = Application.WorksheetFunction.Max(ans, A(i) + (i + 1))
Next
Debug.Print ans
WorksheetFunction を使うのはズルい? あるものは使わないと・・・。
VBA
N = Cells(1, 1)
A = Split(Cells(2, 1), " ")
ans = 0
For i = 0 To UBound(A)
If ans < A(i) + (i + 1) Then ans = A(i) + (i + 1)
Next
Debug.Print ans
VBA での WorksheetFunction はとっても便利。まぁ、Python の組み込み関数とあまり変わらないけど。
加算された数列の最小値
N 個の整数 a_1, a_2, …, a_N が与えられます。
a_i に i を足したとき、N 個の整数の最小値を出力してください。
すべてのテストケースにおいて、以下の条件をみたします。
・ 1 ≦ N ≦ 100
・ 1 ≦ a_i ≦ 100
ふむ。今度は最小値を出力しろ、ということですか。
Python
N = int(input())
A = list(map(int,input().split()))
ans = 1000
for i in range(N):
ans = min(ans, A[i] + (i + 1))
print(ans)
気を付けるべきは、変数 ans に入れる値ですね。先ほどの答えをコピペして、max を min に変更しただけでは、最小値は 0 になってしまう。それをやった人は誰か? LeoSaki(旦那)です。
VBA
N = Cells(1, 1)
A = Split(Cells(2, 1), " ")
ans = 1000
For i = 0 To UBound(A)
ans = Application.WorksheetFunction.Min(ans, A(i) + (i + 1))
Next
Debug.Print ans
ここも、同様に、ans の値にさえ気を付けていれば、間違いないはず!
VBA
N = Cells(1, 1)
A = Split(Cells(2, 1), " ")
ans = 1000
For i = 0 To UBound(A)
If ans > A(i) + (i + 1) Then ans = A(i) + (i + 1)
Next
Debug.Print ans
1 はどこにある?
N 個の整数 a_1, a_2, …, a_N が与えられます。
a_1, a_2, …, a_N のうち、1 がある位置を先頭から順に改行区切りで出力してください。
a_1 を 1 番目とし、a_1, a_2, …, a_N には少なくとも 1 個は 1 が含まれます。
配列から 1 の位置を探せ、という問題。イチの位置を探せって狙ったのかなぁ。
Python
N = int(input())
A = list(map(int,input().split()))
for i in range(N):
if A[i] == 1:
print(i+1)
a_1 を 1 番目としろ、ということなので、print する数値は i+1 でないといけない。
VBA
N = Cells(1, 1)
A = Split(Cells(2, 1), " ")
For i = 0 To UBound(A)
If A(i) = 1 Then Debug.Print i + 1
Next
これも Python とほとんど同じ感じで問題なさそう。
最後に
会社で VBA をよく触っていた人が、Python って簡単っすよ、って言ってた。確かに、ここまでやってきた内容を見ると、すごく学習しやすそうに感じる。
LeoSaki(旦那)は PHP をよく使っていたので、Python って分かりやすいなぁって思う反面、閉じカッコがないので不安になってしまう。
いや、面白いんですけどね。内包表記とか理解できてからは、より一層面白さを感じている。
早く何かを作ってみたい。そのためにも、もっと効率の良い書き方を学習して、自由に使いこなせるようになりたい。
引き続き、お付き合いよろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません