AtCoderって?
AtCoderとは、世界最高峰のプログラミングサイトのことです。
ここでは競技プログラミングというコンピュータプログラムのコンテストを受けることができます。競技プログラミングでは、与えられた要求を満たすプログラムをより早くより正確に競います。その中でも、そのプログラムを処理する時間も評価の対象になります。(処理時間は短いほうが良いです)プログラミングを競技として行わなければいけないわけではありませんが、そこで出題される問題はプログラミング上達に役立つはずです。
このAtCoderというサイトには、過去問やレベルに合わせた問題も豊富にあるため、プログラミングの練習にとってうってつけとなっています。以下リンクです。
AtCoderでは会員登録をしなくても見ることができる問題もありますが、コンテストに参加したり、実際に自分のコードを提出して正しいかを判定できたりするので、会員登録することをお勧めします!
今回はその数ある問題の中でも、AtCoder Beginners Selectionという初心者向けの問題の解説をしていきたいと思います。この問題には、ホーム→コンテスト→AtCoder Beginners Selectionで行くことができますよ!
Welcome to AtCoder
ではまず一問目、AtCoder入門ともいえるこの問題から解いていきましょう。
問題はこちらです。
【問題】
高橋君はデータの加工が行いたいです。
整数 a,b,cと、文字列sが与えられます。a+b+cの計算結果と、文字列sを並べて表示しなさい。
【制約】
・1≦a,b,c≦1000
・1≦|s|≦100
【入力例】
1
2 3
test
【出力例】
6 test
1+2+3は6なので、6と文字列testが出力されています
ポイントは一行目に一つの数字、二行目に二つの数字を入力として受け取る必要があるということです。どのようにコードを書けばよいか、まずは解答例を見てみましょう。
【解答例】
a=int(input())
b,c=map(int,input().split())
s=input()
d=a+b+c
print("{} {}".format(d,s))
では一行目のコードから解説していきます!
input()はキーボードからの入力を受け取る関数ですね。これで受け取ったものは文字列になっているので、int()で整数型に変換します。そしてその数字をaに代入しています。(型の詳しい解説については、後程解説記事を執筆予定です。)
二行目です。ポイントで言った複数の数字を受け取る部分ですね。ここではmap()とsplit()を使っています。map()はリストなどから順に値を取り出し、その要素に指定した関数を実行する関数、split()は指定した文字で文字列を分割し、分割した配列を入手することができる関数です。
この二つの関数についてはこのページの最後にもっと詳しく解説しているのでぜひ見てください!
ここでは、input()で受け取った文字列をsplit()によって空白で分割し、int()によって整数型にした後それぞれをb,cに代入しています。
三行目では一行目と同じようにinput()で受け取った文字列をsに代入していますが、この文字列はそのまま出力すればいいので文字列型のまま代入しています。
四行目では今までに受け取ったa,b,cの値を合計しています。
最後の五行目ではa+b+cの結果であるdと文字列sを出力しています。format()メソッドを使うことで、文字列中の{}にformat()の引数であるd,sを入れることができます。そして、d,sを入れた文字列をprint()で出力します。
はい、これで無事この問題を解くことができました!もし質問等があればお気軽にお問合せください!
関数の解説
それでは、今回出てきたメソッドのsplit()とmap()を解説したいと思います。
split()
split()メソッドでは、与えられた文字列を指定した文字列によって分割し、分割したそれぞれの要素をイテラブルとして取得することができます。イテラブルとは、値に含まれている要素を1個ずつ順に取り出すことができるオブジェクトのことを指します。
例えば、以下のような文字列があったとします。
text="私は、pythonを、勉強して、仕事に、役立てたい"
この文字列を「、」という文字で分割してみましょう。
text2=text.split("、")
ではtext2をprint()で出力してみましょう。
>>> text2=text.split("、") >>> print(text2) ['私は', 'pythonを', '勉強して', '仕事に', '役立てたい']
このように「、」のある部分で文字列が分割され、それぞれの要素を含んリストが出来上がりました!
今回解いたAtCoderの問題では、input()によって入力された文字列を空白という文字で分割した、と見ることができますね!
map()
map()関数では、リストなどのイテラブルから順に要素を取り出し、その要素を引数にして指定した関数を実行することができる関数です。
map()の書式は以下のようになります。
map(関数,イテラブル)
今回解いたAtCoderの問題では、input().split()によって得た文字列2つを持つイテラブルの要素それぞれにint()関数を実行した、と見ることができますね!
終わりに
いかがでしたでしょうか。入門の問題なので少し簡単だったかもしれませんが、これからもAtCoderの問題は解説していきたいと思っています。
分からないところなど質問があればお気軽にお問い合わせください!
では(^^)/
次の記事