【AtCoder】ABC291解説(Python)

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で平均を求める。

解説

numpyimportします。

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]))
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次