AtCoder Beginner Contest 174をPythonで解く

投稿日:  更新日:2022/09/02

Atcoder Python

B!
Daniel AgreloによるPixabay(https://pixabay.com/)からの画像

こんにちは, Shinoryoです.

今回はAtCoder Beginner Contest 174を, Pythonで解いてみた結果を書き連ねていこうと思います.

A - Air Conditioner

入力値が30以上かどうかをif文で判定します.

if int(input()) >= 30:
print("Yes")
else:
print("No")

B - Distance

問題文にある条件を順に確かめていきます.

N, D = [int(x) for x in input().split()]
ans = 0
for i in range(N):
X, Y = [int(x) for x in input().split()]
if (X**2 + Y**2)**(1/2) <= D:
ans += 1
print(ans)

C - Repsept

7, 77, 777, ……の数列を{ai}とすると, これは漸化式で以下のように表されます.

(1)ai={7(i=1)10×ai1+7(i2)

Kで割り切れるかが重要なので, modKを考えることにします.

漸化式より, あるiで以前に出てきた値が再度出現すると, それ以降は繰り返しになります. modKとしてとれる値は0からK1までのK通りしかありませんので, (鳩の巣原理より)高々i=Kまでの調査でよいことになります.

# 入力
K = int(input())
# 7, 77, 777, ……を順番に格納していく変数aの初期化
a = 0
# 高々K回確認すればよい
for i in range(K):
# aの末尾に7を追加
# 数字が大きくなりすぎるのを防ぐために, ここで7で割った剰余にしておく
a = (10*a + 7) % K
# 7で割った剰余が0かどうかを確認
if a == 0:
# 答えの出力
print(i + 1)
exit()
# 存在しなければ-1を出力
print(-1)

D - Alter Altar

「赤い石の左隣に置かれた白い石は災いを招く」というのは, すなわち左側に"R", 右側に"W"がまとまって存在するようにしなければならないことになります. イメージとしては, 右の方にある"R"を左の方にある"W"と入れ替えればよいことになります.

そのためには, まずは文字列に存在する"R"の個数を調べます. 最終的には左端からその個数だけ"R"が並ぶことになりますので, その部分文字列に"W"が何個あるかを調べます. その個数だけ, "R"と"W"の入れ替えを行えばよいことになります.

N = int(input())
c = input()
# 左側に"R", 右側に"W"がまとまって存在するようにしなければならない
# R...R | W .. W
# まず, cに存在する"R"の個数(=Rcount)を調べる
# 左からRcount個だけ"R"が並ぶ状態にすればよい
# 実際には, cから左からRcount個だけ抽出し,
# そのうち"W"の個数だけ, "W"と"R"の入れ替えを行うことになる
print(c[:c.count("R")].count("W"))

E以降

E以降は私の能力不足故に省略いたします.

参考にしたサイト等

Search

About Me

自分の写真
理系大学生でした. Bloggerを利用して発信を行っています.

Labels

Blog Archives