atcoder復習
AtCoder Beginner Contest 294の問題を解いたので記録として残します。
勉強の参考にしてください。
1. 問題
A - Filter(Difficulty8)
解答
n = int(input())
n_list = list(map(int, input().split()))
ans_list = []
for i in n_list:
if i % 2 == 0:
ans_list.append(i)
print(*ans_list)
解法
listでデータを受け取りfor文で内容を確認して偶数の場合にans_listに追加する。
2.問題
B - ASCII Art(Difficulty25)
解答
n, m = map(int, input().split())
ans = ''
ans_list = []
flg_lst = [chr(ord("A")+i) for i in range(26)] # アルファベット格納
for i in range(n):
m_list = list(map(int, input().split()))
for i in m_list:
if i == 0:
ans += '.'
else:
a = flg_lst[i - 1] # 配列に格納されている文字を取り出しセットする。
ans += a
ans_list.append(ans)
ans = ''
for ans_value in ans_list:
print(ans_value)
解法
アルファベットを配列に格納する。入力されたデータを配列で受け取りfor文でアルファベットの配列にアクセスして要素を取得する。
その文字を繋げるようにする。配列のデータが0の場合はアルファベットの配列にアクセスしない。
内側のループが終了したら連結した配列を初期化する。
新しい文字を連結出来るように準備する。
最後はfor文で表示を行う。
3.問題
C - Merge Sequences(Difficulty127)
解答
n, m = map(int, input().split())
flg_list = []
n_list = list(map(int, input().split()))
m_list = list(map(int, input().split()))
ans_list = sorted(n_list + m_list)
flg_list_1 = {ans_list[i]: i + 1 for i in range(len(ans_list))} # {3: 1, 6: 2, 14: 3, 15: 4, 53: 5, 58: 6, 92: 7}
for j in [n_list, m_list]:
for k in j:
print(flg_list_1[k], end= ' ')
print()
解法
配列でデータを二個受け取るようにする。下記に記載
n_list,m_list
その配列のデータを結合させてsortで並び替えを行い別の配列データを作成する。今回の場合だとans_listを作成
flg_list_1で辞書を作成する。辞書の構成→キーが今回確認したい要素、値が要素の場所(index)
for文でn_listとm_listを回してflg_list_1の値(index)を半角スペース区切りで表示する。
キーを[k]でアクセスして紐づいている値を表示する。