1
0

灰色13級がABC327をpythonでやってみた。(A~C問題)

Last updated at Posted at 2023-11-05

はじめに

ABC326で灰色13級になりました。あおぷと.zipです。
今回参加したABC327の解説を書いていきます。
ちなみにABC327で灰色12級になりました。

A - ab

解説

Sを文字列として受け取りS[i]がaでS[i+1]がb,または
S[i]がbでS[i+1]がaならanswerを"Yes"にする。

コード

a.py
input()
s = input()
answer = "No"
for i in range(len(s)-1):
  if s[i] == 'a':
    if s[i+1] == 'b':
      answer = "Yes"
  elif s[i] == 'b':
    if s[i+1] == 'a':
      answer = "Yes"
print(answer)

pythonだとNを受け取らなくてもだいじょぶ。

range(len(s)-1)のところの-1を付け忘れるとWAになる。

追記:2023/12/30

コメントもらってたのに改善してなかった。
すいません。

improvement.py
input()
s = input()
print('Yes' if 'ab' in s or 'ba' in s else 'No')

B - A^A

解説

16**16 > 10**18 なのでパターンは1~15の15通り。
全捜索で一致するパターンがあったらその数字を出力。
なかったら-1を出力。

コード

b.py
b = int(input())
answer = -1
for i in range(1,16):
  if i**i == b:
    answer = i
print(answer)

C - Number Place

解説

まずAを2次元配列として受け取る。
縦を値が重複しないsetにして数が9未満だったらanswerを0にする。
これを9回する。(横も)
そして3x3ブロックごとにsetにし、縦と同じようにする。

コード

c.py
Array = [list(map(int, input().split())) for i in range(9)]
vertical = []
beside = []
block = []
answer = 1
for i in range(9):
  for j in range(9):
    vertical.append(Array[i][j])
    beside.append(Array[j][i])
  if len(set(vertical)) < 9 or len(set(beside)) < 9:
    answer = 0
  vertical.clear()
  beside.clear()
for x in range(3):
  for y in range(3):
    for i in range(3):
      for j in range(3):
        block.append(Array[x*3+j][y*3+i])
    if len(set(block)) < 9:
      answer = 0
    block.clear()
if answer:
  print("Yes")
else:
  print("No")

4重ループにならないような方法コメントに書き込んでくださいお願いします。

終わりに

初めてC問題ACしましたけど4重ループになってます。
今後改善したいです。

1
0
2

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
0