AtCoder Beginner Contest 291(Sponsored by TOYOTA SYSTEMS)の解説記事です。
目次
ABC291 A – camel Case
問題
問題文の要約は以下の通りです。
問題の要約
1 文字だけが英大文字であり、それ以外は英小文字からなる文字列 \(S\) を与えたときに大文字は何文字目か出力せよ。
入力
\(S\)
出力
大文字が \(S\) の先頭から何文字目に登場するかを、整数で出力せよ。
解説1
1文字づつ大文字の集合に含まれているか確認する。
解説
英大文字に含まれているかはin 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
で確認できるのでfor
文で1文字づつ確認します。
解答
S=input()
for i in range(len(S)):
if S[i] in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':
print(i+1)
解説2
大文字か確認するメソッドを用いる。
解説
Python で大文字かどうか判定するメソッドに isupper
があります。このメソッドを使用することができます。
解答
S=input()
for i in range(len(S)):
if S[i].isupper():
print(i+1)
ABC291 B – Trimmed Mean
問題
問題文の要約は以下の通りです。
問題の要約
\(5N\) が点数をつけるので、低い点数 \(N\) 人と高い点数 \(N\) 人を除いた点数の平均を求めよ。
入力
\(N\)
\(X_1\) \(X_2\) \(\cdots\) \(X_{5N}\)
出力
得点を出力せよ。
解説1
点数を並び替えて低い点と高い点を除いた点数の平均を求める。
解説
点数を並び替えます。
X.sort()
低い点と高い点を除いた点数はスライスでX[N:4*N]
となるのでその合計sum(X[N:4*N])
を求めます。それを人数3*N
で割ったものが答えになります。
print(sum(X[N:4*N])/(3*N))
解答
N=int(input())
X=list(map(int,input().split()))
X.sort()
print(sum(X[N:4*N])/(3*N))
解説2
numpy
で平均を求める。
解説
numpy
をimport
します。
import numpy as np
点数を並び替えるところまでは解法1と同じです。
低い点と高い点を除いた点数はスライスでX[N:4*N]
となるのでその平均をnp.mean
で求めます。
print(np.mean(a[n:4*n]))
解答
import numpy as np
N=int(input())
X=list(map(int,input().split()))
X.sort()
print(np.mean(X[N:4*N]))