見出し画像

[ABC282 Python]HHKBプログラミングコンテスト2022 Winter(AtCoder Beginner Contest 282) A~C問題Python解説

ABC282の解説記事です。
ミス等ありましたら、コメントにてご連絡ください。

A問題

K = int(input())
print("ABCDEFGHIJKLMNOPQRSTUVWXYZ"[:K])

K個つなげると考えるよりも、既につながっている物からK個取り出す、という考え方の方がよさそうです。
K<=26の制約があるので、A~Zまでの範囲内なのが確約されています。
A,B,C…の順にK個つなげていくイメージで、先頭のK個を取り出しましょう。

B問題

import itertools

N, M = map(int, input().split())
S = [list(input()) for _ in range(N)]

ans = 0
for i in itertools.combinations(S, 2):
    x = i[0]
    y = i[1]
    judge = True
    for i in range(M):
        if x[i] == "x" and y[i] == "x":
            judge = False
            break
    if judge == True:
        ans += 1
print(ans)    

まずは、2組のペアを作ります。
ペアは組み合わせなので、itertools.combinations()ですね。

これで、考えられるすべてのペアが列挙されたので、
問題文のとおり、
条件を満たすペアの個数を数えていきます。

条件を満たさないペアとは、
どちらも解くことができない問題が存在するということになりますので、
そのようなペアは数えず、そうじゃないペアのみ数えていくと答えを導き出すことができます。

C問題

N = int(input())
S = list(input())

judge = False
for i in range(N):
    if S[i] == '"' and judge == False:
        judge = True
    elif S[i] == ',' and judge == False:
        S[i] = '.'
    elif S[i] == '"' and judge:
        judge = False
print("".join(S))

イメージとしては「.」が出てきたときに「””」の中なのか、外なのかを判定していけばよさそうです。

中外を判定するためにjudge変数を用意します。
judge=Trueなら「””」の中、
judge=Falseなら「””」の外、
と判断します。

文字列Sの先頭から見ていき、
①「”」が来た場合は、judgeのTrueFalseを入れ替えることで、中外を判定することができます。
②「.」が来た場合は、judge=Trueなら「,」に変えます。
③英小文字の場合は何もする必要がありません。

この記事が気に入ったらサポートをしてみませんか?