0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AtCoder初心者振り返りメモ ABC324

Last updated at Posted at 2023-10-15

ABC324の回

参考リンク

https://atcoder.jp/contests/abc324
日本レジストリサービス(JPRS)プログラミングコンテスト2023
(AtCoder Beginner Contest 324)

https://qiita.com/kubochiro/items/5daedd51654a8155bc06
Python zip()関数についてあれこれ

https://qiita.com/hyouchun/items/98b53e9dc8cc0b99e1fe
ABC324をPythonで解いてみたよ。(A~E問題) 

A-問題

問題文
N 個の整数 が与えられます。
これらの値がすべて等しいならば Yes 、そうでなければ No と出力してください。

ポイント
setに格納するのがシンプル。
最初から、setを使うことを思いついたがタイピングに時間がかかってしまった。

A.py
# 2023/10/15 本番解答
# 入力
N = int(input()) 
A = list(map(int,input().split()))
ST = set()
for i in range(N):
    a = A[i]
    ST.add(a)

if len(ST) == 1:
    print("Yes")
else:
    print("No")

もっと簡素化して書けることを学んだ

A2.py
N = int(input()) 
ST = set(map(int,input().split()))

if len(ST) == 1:
    print("Yes")
else:
    print("No")

B-問題

問題文
正の整数 N が与えられます。
N=2x3yを満たす整数x,y が存在するなら Yes 、そうでなければ No と出力してください。

全探索してTLE。単純に割り切れるまで計算するのがシンプルで勉強になりました。

ポイント
単純に割り切れるまで計算する

B.py
# 入力
N = int(input()) 

# 2で割り切れるまで割る
while N % 2 == 0:
    N //= 2

# 3で割り切れるまで割る
while N % 3 == 0:
    N //= 3

if N == 1:
    print("Yes")
else:
    print("No")

C-問題

324C.png

条件を関数でチェックする方針で書いたが、時間内に正解できなかった。
文字長が異なる場合で1文字ずつチェックするアイデアでしっくりするものが浮かばず。
勉強になりました。

ポイント
・zip関数を使う for a , b in zip(A, B):
・リストを改行して出力 print(*ans)

c.py
# 文字長が同じ場合のチェック関数
def diffchk(A,B):
    diffcnt = 0

    # zip は、2つのリストをペアとしてまとめる関数
    for a , b in zip(A, B):
        if a != b:
            diffcnt += 1
    
    if diffcnt <= 1:
        return True

# 文字長が1つ違いの場合のチェック関数
def strchk(A,B):

    # Aの文字長が長いときは、AとBを入れ替える Bが必ず長い文字
    if len(A) > len(B):
        A, B = B, A

    j = 0

    # 1文字ずつチェックする
    for i in range(len(A)):
        if A[i] == B[j]:
            j += 1
            continue
        j += 1

        if i + 1 != j:  # 添え字が合わなければ False
            return False 
        
        if A[i] == B[j]:    # 次の1文字の一致判定
            j += 1
        else:
            return False
    
    return True

# 入力
N,T = map(str,input().split())
N = int(N)  # Nは、整数型

ans = []    # 答えは、リストに格納する

for i in range(1, N + 1):
    S = str(input())

    # 文字長が一致している場合の判定
    if len(S) == len(T):
        if diffchk(S,T):
            ans.append(i)

    # 文字長が1つ文字違いの判定
    elif abs(len(S) - len(T)) == 1:
        if strchk(S,T):
            ans.append(i)

print(len(ans))
print(*ans) # リストを改行で出力
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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?