BOJ/IMplementation/グループ単語checker/Python
5989 ワード
<1316番>
コード1
この場合、リストに文字が既に存在するかどうかをチェックし、すでに存在する場合はグループ語ではありません.
インデックスはインデックス+1と比較されるため、最後の文字に対してインデックス+1がエラーになります.したがって、最後の文字はwhileのドアの外で個別にチェックされます.
ドアの中にちゃんと入れたかったけど、考えたら入れなかった.ちょっと直します.
効率的なコードで書こうと思っていたのですが、方法が分からないので100点だけ考えて解けました.
他のコードを探さなければなりません.
コード2文字列.find(「文字」)
文字列で最初に見つかった文字のインデックスを返します.
つまり、文字列内で「文字」が複数回繰り返されても、最初の位置が返されます. sorted(vocab, key = vocab.find)
関数をkeyの引数として渡し、語彙内のすべての文字に適用します.
コード1
import sys
input = sys.stdin.readline
n = int(input())
ans = n
for i in range(n):
vocabs = input().rstrip()
ch = []
idx = 0
while idx < len(vocabs) - 1:
if vocabs[idx] != vocabs[idx+1]:
if vocabs[idx] in ch:
ans -= 1
break
else:
ch.append(vocabs[idx])
idx += 1
if idx == len(vocabs) - 1 and vocabs[idx] in ch:
ans -= 1
print(ans)
現在のインデックスのテキストとインデックス+1のテキストをwhile文で比較し、リストに個別に格納します.この場合、リストに文字が既に存在するかどうかをチェックし、すでに存在する場合はグループ語ではありません.
インデックスはインデックス+1と比較されるため、最後の文字に対してインデックス+1がエラーになります.したがって、最後の文字はwhileのドアの外で個別にチェックされます.
ドアの中にちゃんと入れたかったけど、考えたら入れなかった.ちょっと直します.
効率的なコードで書こうと思っていたのですが、方法が分からないので100点だけ考えて解けました.
他のコードを探さなければなりません.
コード2
import sys
input = sys.stdin.readline
ans = 0
for i in range(int(input())):
vocab = input().rstrip()
if list(vocab) == sorted(vocab, key=vocab.find):
ans += 1
print(ans)
文字列で最初に見つかった文字のインデックスを返します.
つまり、文字列内で「文字」が複数回繰り返されても、最初の位置が返されます.
関数をkeyの引数として渡し、語彙内のすべての文字に適用します.
Reference
この問題について(BOJ/IMplementation/グループ単語checker/Python), 我々は、より多くの情報をここで見つけました https://velog.io/@k_dah/BOJ-구현-그룹-단어-체커-Pythonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol