0
0

AtCoder初心者振り返りメモ ABC327

Last updated at Posted at 2023-11-04

ABC327の回

ABC完。
これまでの最高パフォーマンスでした。

A-問題

問題文
英小文字からなる長さ N の文字列 S が与えられます。
S の中で a と b が隣接する箇所があれば Yes を、なければ No を出力してください。(a と b の順序は問いません。)

ポイント
ab の並びとba の並びの両方を判定するロジックが必要でした

A.py
N = int(input())
S = str(input())

for i in range(N-1):
    # 並びが ab の場合
    if S[i] == 'a' and S[i+1] == 'b':
        print("Yes")
        exit()
    # 並びが ba の場合
    elif S[i] == 'b' and S[i+1] == 'a':
        print("Yes")
        exit()

print("No")
A2.py
#【別解】文字列Sの中に "ab" "ba" が存在するかのシンプルな書き方
N = int(input())
S = str(input())

if "ab" in S:
    print("Yes")
    exit()  
if "ba" in S:
    print("Yes")
    exit()  
    
print("No")

B-問題

問題文
整数 B が与えられます。
AのA乗 = B であるような正の整数 A が存在するならばその値を、存在しないならば -1 を出力してください。

ポイント
乗数なので計算結果が大きくなるので、Bをオーバーする値は探索対象から除外する。

B.py
B = int(input())

ans = 0
i = 1
# while文で、Bの値をオーバするまでpow関数で計算した
while ans <= B:
    ans = pow(i,i)
    if ans == B:
        print(i)
        exit()
    else:
        i += 1

print(-1)

C-問題

問題文
327C.png
ポイント
set の要素数で、条件の範囲を1から9まで埋めているかを判定
3 x 3 の範囲の判定では、時間をかければより賢いコードがかけるかもしれないが、時間内の回答を優先して力技で記述しました。

C.py
<入力例>
1 2 3 4 5 6 7 8 9
4 5 6 7 8 9 1 2 3
7 8 9 1 2 3 4 5 6
2 3 4 5 6 7 8 9 1
5 6 7 8 9 1 2 3 4
8 9 1 2 3 4 5 6 7
3 4 5 6 7 8 9 1 2
6 7 8 9 1 2 3 4 5
9 1 2 3 4 5 6 7 8

A = [input().split() for i in range(9)]  

# 横一列を1から9まで埋めているかを判定
for i in range(9):
    ST = set()
    for j in range(9):
        ST.add(A[i][j])
    if len(ST) != 9:
        print("No")
        exit()

# 縦一列を1から9まで埋めているかを判定
for i in range(9):
    ST = set()
    for j in range(9):
        ST.add(A[j][i])
    if len(ST) != 9:
        print("No")
        exit()

# 3 x 3 の範囲指定は、ベタ書きしてクリアした。
ST = set()
for i in range(0,3):
    for j in range(0,3):
        ST.add(A[i][j])
if len(ST) != 9:
    print("No")
    exit()

ST = set()
for i in range(0,3):
    for j in range(3,6):
        ST.add(A[i][j])
if len(ST) != 9:
    print("No")
    exit()

ST = set()
for i in range(0,3):
    for j in range(6,9):
        ST.add(A[i][j])
if len(ST) != 9:
    print("No")
    exit()

ST = set()
for i in range(3,6):
    for j in range(0,3):
        ST.add(A[i][j])
if len(ST) != 9:
    print("No")
    exit()

ST = set()
for i in range(3,6):
    for j in range(3,6):
        ST.add(A[i][j])
if len(ST) != 9:
    print("No")
    exit()

ST = set()
for i in range(3,6):
    for j in range(6,9):
        ST.add(A[i][j])
if len(ST) != 9:
    print("No")
    exit()

ST = set()
for i in range(6,9):
    for j in range(0,3):
        ST.add(A[i][j])
if len(ST) != 9:
    print("No")
    exit()

ST = set()
for i in range(6,9):
    for j in range(3,6):
        ST.add(A[i][j])
if len(ST) != 9:
    print("No")
    exit()

ST = set()
for i in range(6,9):
    for j in range(6,9):
        ST.add(A[i][j])
if len(ST) != 9:
    print("No")
    exit()

print("Yes")

参考リンク
https://qiita.com/T_death/items/c415728b309173c2521f

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