0
0

More than 1 year has passed since last update.

超初心者がAtcoder ProblemsのB問題を99から110まで解いてみる件【10割自分用】

Posted at

解き方を忘れないためにまとめてるだけなのでコードはめちゃくちゃ不細工です、ここもっと良くできるよって場所あったら教えていただけるとありがたいです!!

Cut and Count

practice.py
n = int(input())
s = input()
ans = 0
for i in range(1,n):
    cnt = len(set(s[:i])&set(s[i:]))
    ans = max(ans, cnt)
print(ans)

まず、すべての切れる場所を全探索してset型にして重複を消す。次にどっちともにも共通する要素の数をlen(set(s[:i])&set(s[i:]))で調べ上げて、最大の数が入るようにmaxメソッドで比較し続ける

Stone Monument

practice.py
a,b = map(int, input().split())
temp = b-a
cnt = 0
for i in range(temp+1):
    cnt += i
print(cnt-b)

bの数字からaの数字を引くと1+2+3...+NのNの数字が取得できるので、N+1回for文で足し算し続ければギリギリ埋まっていない塔の高さがわかるので、それからbを引いたら答えが出てきます!

Ringo's Favorite Numbers

practice.py
d,n = map(int, input().split())
print((100**d)*n if n != 100 else (100**d)*(n+1))

この問題コーナケースというものがあるらしく、nが100の時はうまく成り立たなくなるので、nに1を加えてから計算するらしいです。
ここで詳しい解説がされてます、c++コードですが考え方の問題なのでコードはあんまし関係ないです。
https://blog.hamayanhamayan.com/entry/2018/06/17/100130

Digit Sums

practice.py
n = input()
s = 0
for i in range(len(n)):
    s += int(n[i])
if int(n) % s == 0:
    print("Yes")
else:
    print("No")

sを楽に作りたいのでstr型で入力を受け取って、sをまず作ります。その後に受け取った値をint型に変換してsで割ります

Maximum Difference

practice.py
n = int(input())
numbers = list(map(int, input().split()))
print(max(numbers) - min(numbers))

2要素の差の最大値ということはリストの中の最大の値をmaxメソッドで見つけ出して、最小の値(minで見つけ出せる)で引くだけです。

String Rotation

practice.py
s = input()
t = input()
if s == t:
    print("Yes")
    exit()
for i in range(len(t)):
    first = t[:i]
    second = t[i:]
    if (second+first) == s:
        print("Yes")
        exit()
print("No")

tを入れ替えてできる文字列を全探索して、一致するか判定するだけ!

AcCepted

practice.py
s = input()
judge = True
if s[0] != "A":
    print("WA")
    exit()
if s[2:-1].count("C") != 1:
    print("WA")
    exit()
s = s.replace("A","").replace("C","")
if not s.islower():
    print("WA")
    exit()
print("AC")

AとCの判定をした後に、sからAとCを取り除いて、残った文字列が完全に小文字で構成されてるかを確認しています。一つでも引っ掛かったらWAが出る仕組みです

Cakes and Donuts

practice.py
n = int(input())
for i in range(n):
    for j in range(n):
        if (4*i) + (7*j) == n:
            print("Yes")
            exit()
print("No")

単純に全探索を回すだけです。 すごい雑ですんません...

105

practice.py
n = int(input())
ans = 0
for i in range(1,n+1,2):
    cnt = 0
    for j in range(1,i+1):
        if i % j == 0:
            cnt += 1
    if cnt == 8:
        ans += 1
print(ans)

1からN+1の範囲内の奇数をiにぶち込んでfor文を回して、約数の数を判定するために、1からi+1の範囲で2個目のfor文を回して、約数が8個かどうかを調べ上げる

Grid Compression

practice.py
h,w = map(int, input().split())
a = []
b = []
c = []
for i in range(h):
    s_line = list(input())
    if "#" in s_line:
        a.append(s_line)
for i in range(w):
    temp_list = []
    for j in range(len(a)):
        temp_list.append(a[j][i])
    if "#" in temp_list:
        b.append(temp_list)
for i in range(len(a)):
    supportlist = []
    for j in range(len(b)):
        supportlist.append(b[j][i])
    c.append(supportlist)
for c_line in c:
    print(''.join(c_line))

ACしてる人の出力見てしもうたよ、むずかったわ...解釈としてはまず横一列すべて"."の要素をすべて取り除く。 そして次に親forをwで回すことによって縦一列すべて"."の要素を取り除く。最後に入力と同じような形に戻すためにもう一度for文を回す。supportlist.append(b[j][i])でjが先になっているのはbでは縦列が基本になっているから。

Ruined Square

practice.py
x1,y1,x2,y2 = map(int, input().split())
xlength = x2 - x1
ylength = y2 - y1
x3 = x2 - ylength
y3 = y2 + xlength
x4 = x1 - ylength
y4 = y1 + xlength
print(x3, y3, x4, y4)

この問題は一回図を書いてみると凄い簡単に理解できて、何をやればいいかが分かります!

Shiritori

practice.py
n = int(input())
words = [input() for _ in range(n)]
for i in range(1,n):
    if words.count(words[i]) >= 2:
        print("No") 
        exit()
    else:
        if words[i][0] != words[i-1][-1]:
            print("No")
            exit()
print("Yes")

一度すべての単語をリストに格納してから、確認していきました、for文が1からnなのは最初の単語がひっかることは絶対にないのと、elseに行ったあとの処理でエラーが出てしまうからです。

1 Dimensional World's Tale

practice.py
n,m,x,y = map(int, input().split())
xlist = list(map(int, input().split()))
ylist = list(map(int, input().split()))
for i in range(x+1,y+1):
    judge = True
    for xnum in xlist:
        if i <= xnum:
            judge = False
            break
    for ynum in ylist:
        if i > ynum:
            judge = False
            break
    if judge:
        print("No War")
        exit()
print("War")

考えられるzの値を全探索します、すべてのif文センサーを通り抜けられたzが存在するときに"No War"を表示してプログラムをexitメソッドで終了します、もしzの値がなんであってもwarになってしまう場合は"war"を表示します

0
0
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
0
0