競技プログラミング

【超初心者向け】AtCoderで最初に解くべき過去問集を分かりやすく解説します【0問目】

プログラミング

こんにちは!サトシ(@satoshi365_blog)です!

 

この記事では、「AtCoderに登録して最初に解くべき10問(AtCoder Beginners Selection)」の0問目「Welcome to AtCoder」をめちゃくちゃ分かりやすく解説していきます。

AtCoder で問題を解くためには、新規登録しないといけません。

新規登録はこちらから → AtCoder に新規登録する

「1問目」ではなく、「0問目」から始めるなんてオシャレですよね。(プログラミングの世界では、数を0から数えます

 

でも実は、オシャレだから「0」から始めたわけではありません。

「最初に解くべき10問」のはずが、数えてみると全部で11問あったのです。

だから仕方なく「0問目」から数え始めることにしたのです。

 

それでは、「Welcome to AtCoder」の解説をしていきます!

「Welcome to AtCoder」で身につくスキル

この問題では、このようなスキルが身につきます。

身につくスキル
  • プログラミングの基本
  • print()の使い方
  • コメントアウトの使い方
  • input() の使い方
  • int() の使い方
  • split() の使い方
  • map() の使い方
  • format() の使い方

先に、それぞれどのようなスキルなのかを説明します。

 

プログラミングの基本1【文字列と数値】

プログラミングの世界には、「文字列」と「数値」があります。

サトシ
サトシ
文字列」とは「 ‘あいうえお’ 」のようなものです。

数値」とは「 12 」のようなものです。

文字列は普通、「 ‘Hello World!’ 」のようにシングルクォーテーション( ‘  )や、ダブルクォーテーション( ” )で囲みます。

 

じゃあ、「 ‘1’ 」は「文字列」でしょうか?それとも「数値」でしょうか?

答えは、「文字列」です。

クォーテーションで囲んであるからです。

 

つまり、「文字列の1」と「数値の1」があるということです。

  • 文字列の1  :  ’1′
  • 数値の1   :   1

「文字列の1」は足し算すると、このようにくっついてしまいます。

文字列の1同士の足し算

このように、文字列は数値じゃないから「 1 + 1 = 2 」のように計算できません。

 

プログラミングの基本2【代入】

プログラミングでは、変数に文字列や数値を代入します。
数学とかでよく見る 「x = 3 とする」みたいな感じです。

感覚的には、x という名前の箱に文字列や数値を収納している感じです。

x = 'Hello World'
y = 10
abc = 'test'
add = 10 + 3
in = abc

add という名前の箱には 10 + 3 の結果、13 が入ります。

abc という名前の箱には ‘test’ が入っています。
だから、in = abc は in = ‘test’ と同じ意味になります。

プログラミングの基本3【リスト】

プログラミングでは、リストに文字列や数値、変数を収納します。

感覚的には、y という名前のタンスに、x という名前の箱や文字列、数値を収納している感じです。

y = [1, 2, 3]               #[1, 2, 3]
abc = ['one', 'two', '3']   #['one', 'two', '3']
mix = ['one', 10]           #['one', 10]
add = [3, 1, 1, 2 + 1]      #[3, 1, 1, 3]

print() の使い方

print() を使うと、カッコの中を出力できます。

‘Hello World!’ と出力したいときは、このようにします。

print('Hello World!')

 

このように変数も出力できます

a = 'Good'
print(a)   #Good と出力される

 

このようにすると、‘Hello World! Satoshi!’ と出力できます。

print('Hello World!' + ' Satoshi!')

コメントアウトの使い方

Pythonでは、「#」より後ろは無視されます。
これを「コメントアウト」と言います。

#ここは無視されます
#なので何を書いてもエラーは起きません^^
#print('Hello World!')
#上の print('Hello World!') も無視されます

サトシ
サトシ
コメントアウトを使って、プログラムの説明を書いておくと、メンテナンスしやすいコードになります^^

input() の使い方

input() を使うと、ユーザーが文字列を入力できます。

#ここでは s に入力を代入します
s = input()
#ここで入力待ちになるので、'Hello World!' と打ちます
#これで、 s に 'Hello World!' という文字列が入りました
print(s)
#'Hello World!' と出力されます

int() の使い方

int() を使うと、文字列を数値に変えられます。

まずは、int() を使わずに ‘1’ + ‘1’ をしてみましょう。

moji = '1'
print(moji + moji)
# '1' と '1' がくっつきます
#だから、'11' が出力されます

次は int() を使って 1 + 1 をしてみましょう。

moji = '1'
#moji を int() で数値に変えます
suti = int(moji)
print(suti + suti)
# 2 と出力されます

文字列と数値の違いが分かると思います。

int() を使って、1(文字列)→1(数値)にする!!

split() の使い方

split() を使うと、文字列を分けることができます

文字列 ‘Hello,World,Satoshi’ を ‘,’ で3つに分けてみます。

s = 'Hello,World,Satoshi!'
#split() を使って ','で分けます
a, b, c = s.split(',')
print(a)
#'Hello' と出力されます
print(b)
#'World' と出力されます 
print(c)
#'Satoshi!' と出力されます

map() の使い方

map() を使うと、リスト全体にいろいろな処理をできます

例えばこのように、全部文字列だったリストの中身を全部数値に変えられます。

a, b = map(int, ['1', '4'])
print(a)
#数値の 1 が出力される
print(b)
#数値の 4 が出力される

リストの中の ‘1’ と ‘4’ どちらにも、int() を使えるのです!

format() の使い方

format() を使うと、文字列の中に変数を入れることができます。

このように使います。

a = 10
b = 20
print('{}'.format(a))        #10 と出力する
print('{}{}'.format(a, b))   #1020 と出力する

このように、文字列の中にある {} が変数に置きかわります

「Welcome to AtCoder」の解説

0問目Welcome to AtCoder」はチュートリアルです。

  • 問題文
  • 入力例と出力例
  • 解答例
  • 詳しい解説

この順番で書いていきます。

それでは見ていきましょう。

 

問題文

問題はこれです。

 

問題文
高橋君はデータの加工が行いたいです。
整数 a, b, c と、文字列 s が与えられます。a + b + c の計算結果と、文字列 s を並べて表示しなさい。

制約
・1 ≤ a, b, c ≤ 1000
・1 ≤ |s| ≤ 100

入力
入力は以下の形式で与えられる。

a
b c
s

出力
a + b + c と s を空白区切りで1行目に出力せよ。
また、出力の末尾には改行を入れること。

PracticeA-Welcome to AtCoderより引用

 

入力例と出力例

入力例

1
2 3
satoshi

出力例

6 satoshi

 

解答例

この問題はチュートリアルだから、模範解答があります

今回はそれを解説します。

# -*- coding: utf-8 -*-
# 整数の入力
a = int(input())
# スペース区切りの整数の入力
b, c = map(int, input().split())
# 文字列の入力
s = input()
# 出力
print("{} {}".format(a+b+c, s))

 

詳しい解説

コードを詳しく解説していきます。

 

まずは、a を受け取ります。

そのために、 input() を int() で囲んで、入力された文字列を数値にします

a = int(input())

 

次に b と c を受け取ります。

2回目の input() では、’2 3′ みたいに2つの数字がくっついてきます。
それを、split() で ‘2’ と ‘3’ に分けます。

そのあとに、map関数を使って、2つの数字を数値にします

b, c = map(int, input().split())

 

そして s を受け取ります。

s = input()

 

最後に a + b + c と s を空白区切りで出力します。

print("{} {}".format(a+b+c, s))

 

 

最後に、もう一度プログラムを確認してみましょう。
# -*- coding: utf-8 -*-
# 整数の入力
a = int(input())
# スペース区切りの整数の入力
b, c = map(int, input().split())
# 文字列の入力
s = input()
# 出力
print("{} {}".format(a+b+c, s))

これで、a + b + c と s を空白区切りで1行目に出力できました。

問題文には、「また、出力の末尾には改行を入れること。」と書いてあるけど、Pythonではprint関数の後に自動で改行が入ります

 

まとめ

もし分からない点などありましたら、気軽にTwitterなどでご質問ください^^

少しでも参考になれば嬉しいです!

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です