あとでこれ使えばよかったってなるやつ。(ABC88B)
こんばんは。
先日投稿した記事にいいねがついていたんですが(もしかして’いいね’ではない?)、その人のプロフィールにエンジニア向けって書いてあってなんかすみませんってなりました。pythonに関しては完全に趣味で大学では全然関係ないところを学んでおります。
まあ私の専攻科目のことはどうでもいいんですが(ならなぜ話した)、今日はABC88のB問題をやったのでそのことについて話したいと思います。
それで、わたしが書いた回答がこれです。
N=int(input())
N+=1
a=list(map(int,input().split()))
a.append(0)
A=sorted(a)
ans=0
for i in range(N//2):
ans+=A[-i*2-1]-A[-i*2-2]
print(ans)
で、これは25msでACしたわけです。
なんで0を加えたかというと、後ろからとるときに最後の数をどうカウントするかがよくわからなくて、とりあえず先頭のかずを0にしておけばNが偶数でも奇数でもなんとかなるんじゃね?と思ったからです。(Nが奇数なら最後のforはx-0になるしNが偶数ならforで先頭の数が拾えないけど0だから問題ない)今思えば偶数奇数の判断をして奇数ならA[0]を加えればいい気がしますが。
で、もっと早い解き方ないかなって思ってpythonでの世界の提出結果を調べたら
#一部抜粋、input過程は省きます
A=sort(reverse=1)
print(sum(A[::2])-sum(A[1::2]))
そうだ、それ使えばいいんだった。ってなりました。
今日学んだこと
逆向きにsortしたいときはsort(reverse=1) ※reverse=1 の1はTrueと等価
2個飛ばしの時は[::2] ※[start:end:skip]である
まだまだがんばらないと…茶色までの道は遠いです!
この記事が気に入ったらサポートをしてみませんか?