はこねのはこ

はこねさんの備忘録

AtCoder ABC122-Aの解法メモ

はじめに

AtCoder122のA問題について、 if文で記載したもののfindを使用するともっとスッキリ記載できることを知ったのでメモ

問題

AtCoder 星には四種類の塩基 A, C, G, T が存在し、A と T、C と G がそれぞれ対になります。

文字 bが入力されます。これは A, C, G, T のいずれかです。塩基 bと対になる塩基を表す文字を出力するプログラムを書いてください。

atcoder.jp

最初に解いた方法

いい方法が思いつく前にif文を組んだ方が早いと感じて脳死戦法しました

b = input()

if b == 'A':
    output = 'T'
elif b == 'C':
    output = 'G'
elif b == 'G':
    output = 'C'
elif b == 'T':
    output = 'A'
else:
    pass

print(output)

解き直した方法

print("TGCA"["ACGT".find(input())])

ACGTを文字列とし、findメソッドでインデックスを求め、 対になる文字列を求めます。

コード量が少ないので、コーディングの時間短縮できそうです。

メソッド

findメソッド

文字列検索に使用するメソッドです。

検索対象のインデックスを返してくれます。

見つからなかった場合は-1となります。

s = 'hakoneko game dev'
print(s.find('d'))
# 14

print(s.find('game'))
# 9

print(s.find('app'))
# -1

print(s.find('D'))
# -1

rfindメソッド

findは文字列の先頭から検索しますが、rfindを用いると、 後ろから検索します。

s = 'hakoneko game dev'

print(s.find('k'))
# 2

print(s.rfind('k'))
# 6