1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【AtCoder】ABC202をPython3で解説

Posted at

ABC202の解説。

A - Three Dice

解説

3つのサイコロを投げて、出た目と反対の面が表す整数を足し合わせた値を求めるもの。

そもそもサイコロは、表と裏を足して7になるようにできている。つまり、1の裏は6、2の裏は5、3の裏は4となっている。

したがって、出た目をa, b, cとすると、それぞれの裏の値は、7-a, 7-b, 7-cとなる。これらを足し合わせたものが答えなので、(7-a)+(7-b)+(7-c)=21-(a+b+c)となる。

つまり、次のようなコードとなる。

コード

a, b, c = map(int, input().split())
print(21 - (a + b + c))

B - 180°

解説

問題としては、Sを180度回転したものを出力するというもの。

文字列は、0, 1, 6, 8, 9なので、反転すべきものは、6, 9のみ。
testに値を代入して、6, 9ならば、9, 6に入れ替える。それ以外の値はそのまま新しいリストに追加する。

あとは、そのリストをそのまま反転させるだけ。

最後は、''.join()でリストの値を連結する。

コード

S = str(input())

l = []

for s in S:
    test = s
    if test == '6':
        test = '9'
    elif test == '9':
        test = '6'
    l.append(test)

print(''.join(reversed(l)))

C - Made Up

解説

A_i = B_(C_j)となる(i, j)の総数を出力するもの。
となっているが、単なる数え上げ問題。

まず、Aに何の数字が何個あるのかを辞書にする。その際にはCounter()を用いる。
例えば、A = [1, 2, 2]ならば、Counter({1: 1, 2: 2})となり、1が1つ、2が2つであることがわかる。

次に、これをBと参照していく。Bの値を辞書で参照して、順番に値を探していく。
例えば、入力値が3であれば、先程の辞書には値がないため、新しいリストl0が追加(append)される。入力値が1であれば、個数(value)として1が取りだされ、リストl1が追加される。同様に入力値2で、リストに2が追加される。

最後にCを見ていく。これは少しわかりにくいので、先に例を出す。例えば、入力値が2であれば、A_i = B_2となるような値を探しに行くことになる。ここでいうB_2の値は、2番目に入れた1の値である。つまり、1Aにいくつあるのか、これは先ほど作成したリストlで確認できる。

今回Bでは、2番目だが、Pythonのリストのindexは0から始まるので、indexは1である。つまり、l[i-1]の値を参照することで求められる。

これらをCの入力値それぞれで検証し、ansに足していくことで答えが出力される。

コード

# O(n)

from collections import Counter

N = int(input())
ans = 0

A = list(map(int, input().split()))
# それぞれの数字が何個あるかの辞書
tmp = Counter(A)

l = []

# 入力した値がAの辞書にいくつあるのか確認
for i in map(int, input().split()):
    l.append(tmp[i])

# jは1から始まるので、[i-1]の値を参照
for i in map(int, input().split()):
    ans += l[i-1]

print(ans)

おまけコード(TLE)

# O(n^2)

from collections import Counter

N = int(input())

A = list(map(int, input().split()))
B = list(map(int, input().split()))
C = list(map(int, input().split()))

cnt = 0

for c in C:
    result = Counter(A)
    cnt += result[B[c-1]] # n^2回実行で、TLE

print(cnt)
1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?