見出し画像

AtCoder Card game for Two by Python map関数

n = int(input())
ls = list(map(int,input().split()))
alice = 0
bob = 0
b = sorted(ls, reverse=True)

for i in range(n):
   if (i%2 ==0):
       alice+=b[i]
   else:
       bob+=b[i]

ans = alice - bob
       
print (ans)

こんにちは!お久しぶりです。今回は今までに引き続きAtCoderの問題を解説していこうと思います!!

https://atcoder.jp/contests/abs/tasks/abc088_b

簡単な問題から説明していこうと思うんですが、今回の問題は二人で交互にカードを大きい数から引いていき、お互いの合計の差を出力する問題です。

前回までとの違いは入力方法と並べ替えをするところが新しい所です。

では、まず入力から始めて行きます。
最初の"n="はその後の"for"で"range()"の中に使っているので文字としてではなく整数として"int"で入力します。(Pythonでは何も指定しないとstrとして入力されます)
次の"input"が少し複雑になっていますが分解してみて行こうと思います!!

ls = list(map(int,input().split()))

まずは

input().split()

ここまでは前回までも使っていたので大丈夫だと思いますが、入力された文字(今回は"int"で定義してます)を分けています。()内にカンマやスペースを入れるとその文字で分ける事が出来ます!!今回は省略して何も指定していないのでデフォルトのスペースで分けられます。
問題で指定が有った場合は注意してください。
では、次の"map"です。

map(int,input(),split())

"int"は今まで通り整数での定義です。今までと違うのは"map"がある事と"int()"で書かず","カンマで区切っている事です。
では、"map"の意味から説明しようと思います!
高階関数と呼ばれ第一引数での処理を第二引数以降も処理してくれるものです。
高階関数というのは「関数を引数、戻り値として扱う関数」(引用1)だそうです。正確にはもっときっちりした定義がありますが、上記のように理解していたら大丈夫だと思います!

つまりは、"input"関数で入力された文字を一個ずつ"int"に渡して整数にするという事です。
使い方の例です

def y(x):
   return x**2 
   
x = list(range(10))
c = map(y,x)
print(list(c))

# 0 1 4 9 16 25 36 49 64 81

単純な二乗するプログラムです。リストxを順に"y"という関数(上で定義)に渡して処理をしています。
"map"の使い方はこのくらいです。
その後にリストにするために"list()"で囲って入力は完了です。

今日は長くなってしまったので並べ替えをしている"sorted"については別で書きます!
最後まで読んで頂きありがとうございます!



この記事が気に入ったらサポートをしてみませんか?