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?

【Python】Atcoder勉強記録①

Last updated at Posted at 2023-03-19

atcoder復習

下記にatcoderで解いたB問題を記載します。
勉強の記録として残します。是非参考にしてください。
解いた問題一覧

目次

1. 問題①
2. 問題②
3. 問題③

1.問題①

B - Playing Cards ValidationDifficulty65

解答

n = int(input())
n_lst = ['H', 'D', 'C', 'S']
n_lst_1 = ['A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K']
n_lst_2 = [] # 入力したデータを格納する
flg = True
for _ in range(n):
    n_1 = input()
    n_lst_2.append(n_1)
    if not n_1[0] in n_lst:
        flg = False
    if not n_1[1] in n_lst_1:
        flg = False

def chk(seq):
    '''重複確認'''
    return len(seq) != len(set(seq))

if chk(n_lst_2):
    flg = False

if flg:
    print('Yes')
else:
    print('No')

解法

確認するデータを配列に格納しておく。
入力をされたら配列の中にデータがあるのかを確認し存在していたらflgをFalseにする。
そして最後のif文で出力する文字を判断する。

if文、for文、配列を使用出来れば解ける問題である。
重複確認では配列をset型にして重複を無くし元の配列と長さを確認している。
長さが違うのであれば重複があるのでflgをFalseにしている。

2.問題②

B - レDifficulty225

解答

N, M = map(int, input().split())
n_list = list(map(int, input().split()))
ans_list = [] # 並び替えない配列
ans_list_1 = [] # 並び替えた配列
flg_list = [True] * N
cnt = 1

for j in n_list:
    flg_list[j - 1] = False # レ点の場所をチェックする。

for k in flg_list:
    ans_list.append(cnt)
    if k == True:
        ans_list_1 += reversed(ans_list)
        ans_list = []
    cnt += 1

if M == 0:
    for i in range(1, N+ 1):
        ans_list.append(i)
    print(*ans_list)
else:
    print(*ans_list_1)

解法

flg_listでレ点がある場所にチェックをしている。True→Falseにする。
flg_listをfor文で回しTrueが出現したら配列を逆順にして別の配列にセットする。
逆順にした配列は空にする。
この処理をflg_listの中身を全部確認するまで行う。
最後に配列の中身を表示する。

3.問題③

B - Call the ID NumberDifficulty65

解答

K = int(input())
k_lst = list(map(int, input().split()))
flg_lst = [0] * K
cnt = 0
ans_lst = []
for i in range(1, K + 1):
    ans = k_lst[cnt]
    if flg_lst[i - 1] != 1:
        if not flg_lst[ans - 1] == 1:
            flg_lst[ans - 1] = 1
    cnt += 1
ans = flg_lst.count(0)
print(ans)
print(*[i + 1 for i, x in enumerate(flg_lst) if x == 0])

解法

flg_lstを用意して人が呼ばれた場合にチェックをする。
今回の場合は配列のデータが1になっている場合が呼ばれている。
解答として出力するのは0の個数(呼ばれていない人数)と呼ばれていない人の数
配列に格納されている0の位置を表示するには0がどこに出現しているのかをfor文で確認して表示する。

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?