LoginSignup
1
4

More than 3 years have passed since last update.

今日のAtCoder ~茶色コーダーまでの道~

Posted at

AtCoderの日記として、今日解いた問題を記述してきます。
基本は、ここ*1に書かれている問題を解いていく形にしています。
競技プログラミングをやるときは、ローカルの環境よりも、楽に実行出来るPaiza.ioを使っています。

ほぼ日記なので、口癖などは、気にしないでください。

本日解いた問題

  1. A - RGB Cards
  2. A - Infinite Coins
  3. A - Round Up the Mean
  4. A - Something on It
  5. A - Already 2018
  6. B - i18n
  7. B - Two Anagrams
  8. B - Break Number
  9. 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文でかけるぜ!的な事が書かれていたけど、どうやったら良いんだろ。

参考文献

*1 AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4