AtCoderの日記として、今日解いた問題を記述してきます。
基本は、ここ*1に書かれている問題を解いていく形にしています。
競技プログラミングをやるときは、ローカルの環境よりも、楽に実行出来るPaiza.ioを使っています。
###ほぼ日記なので、口癖などは、気にしないでください。
本日解いた問題
- A - RGB Cards
- A - Infinite Coins
- A - Round Up the Mean
- A - Something on It
- A - Already 2018
- B - i18n
- B - Two Anagrams
- B - Break Number
- B - Maximum Difference
それぞれのコード
一問目
r,g,b=map(str,input().split())
res=int(r+g+b)
if res%4==0:
print("YES")
else:
print("NO")
四の倍数ならばという条件だったので、あまりが0なら成立するんじゃね?と考えてかいた。
二問目
正解
N=int(input())
A=int(input())
s=N%500
if s<=A:
print("Yes")
exit()
print("No")
####不正解
N=int(input())
A=int(input())
s=N//500
for i in range(A):
if i+s*500==N:
print("Yes")
exit()
print("No")
最初は、合計金額を出して、求めれば良いのでは?と考えて実装した。
最後のテストの時にWAが出たので、組み直した。
二回目は、500のあまりが、1円の合計で作れたら良いんじゃね?というイメージで作成した。
三問目
a,b=map(int,input().split())
s=a+b
ss=s//2
s2=s%2
if s2==1:
print(ss+1)
exit()
print(ss)
import math
を使って、関数を使うやり方が、シンプルになるんだろうけど、アルゴリズムを書く力を鍛えたいなと思って、切り捨ててから、+1をするという書き方で書いてみた。
(全然スマートじゃない書き方)
四問目
最初
S=input()
cou=int(S.count("o"))*100
print(700+cou)
二回目
S=input()
res=700
for i in S:
if i=="o":
res+=100
print(res)
三回目
res=700
for i in input():
if i=="o":
res+=100
print(res)
countを使って調べて計算すれば、簡単に求まるなと思ったので、countを使った。
countを使えない時用に、ifとforを使って書いてみたのが二回目
若干、コードを短く出来ると思って、三回目を書きました。
五問目
S=input()
S="2018"+S[4:]
print(S)
print("2018"+input()[4:])
最初を2018に変更すれば良いだけだったので、最初の数文字を2018に変更して、出力した。短くしようと思ったら、1行で出力できた。
六問目
s=input()
fir=s[0]
las=s[-1]
s=s[1:]
s=s[:-1]
print(fir+str(len(s))+las)
間の文字をカウントして、最初と最後の文字を結合して出力すれば、良いという問題だった。
最初の文字と最後の文字を代入
最初と最後の文字を消す
中の文字をカウントする
文字列にして出力するという書き方で書いた。
七問目
s=input()
t=input()
s=sorted(s)
s="".join(s)
t=sorted(t,reverse=True)
t="".join(t)
# print(s,t)
if s<t:
print("Yes")
else:
print("No")
sortedの使い方をわかることが出来た問題
結構無駄があるコードになった。
八問目
N=int(input())
n=1
while True:
if n>N:
print(int(n/2))
break
n=n*2
2で割れる数字は、2のn乗が一番大きいので、2倍していく形にした。
九問目
N=int(input())
lis=list(map(int,input().split()))
lis.sort(reverse=True)
print(lis[0]-lis[-1])
ソートして、最初と最後の文字を引けば良いなと思って、ソートして出力した。
元記事だと、for文でかけるぜ!的な事が書かれていたけど、どうやったら良いんだろ。