[テストエンコーディング例]スキルツリー
問題の説明
先行スキルとは、あるスキルを学ぶ前に学ばなければならないスキルです.
例えば、現在スキル順が「スパーク」→「発光ボルト」→「カッター」の場合、学習カッターはまず「発光ボルト」を学び、「発光ボルト」はまず「スパーク」を学ぶ.
以上の手順にない他のスキル(癒しなど)は順番に学ぶことができます.そのため、スパーク→癒し→ハイライトボルト→メスなどのスキルツリーを使用することは可能ですが、メス→スパークまたはハイライトボルト→スパーク→癒し→メスなどのスキルツリーを使用することは不可能です.
先行スキル順スキルとプレイヤーが作成したスキルツリー1の配列スキルtreeをパラメータとして付与する場合は、できるだけスキルツリーの個数を返すsolution関数を書き出します.
せいげんじょうけん
スキルはアルファベット大文字でマークされ、すべての文字列はアルファベット大文字のみで構成されています.
スキル順序とスキルツリーは文字列で表されます.
例えば、C→B→DであればCBDと表記する.
前置スキル順序スキルの長さは1以上26以下で、スキルは繰り返してはいけません.
skill treesは、長さが1または20未満の配列である.
skill treesの要素はスキルを表す文字列です.
skill treesの要素の長さは2または26未満であり、このスキルは繰り返しません.
I/O例
skill : CBD
skill_trees : [BACDE, CBADF, AECB, BDA]
return : 2
I/O例説明
BACDE:Bスキルの前にCスキルを学ぶ.不可能なスキル
CBADF:可能なスキルツリー.
Apache:可能なスキルツリー.
BDA:Bスキルを学ぶ前に、Cスキルを学ばなければなりません.不可能なスキルツリー
私が解読したコード
まず、skill treeリストの各要素が実行可能かどうかを決定するために、関数check()が実装される.
可能であれば、Trueに戻ってそれを計算すれば、答えは正しい!
先行スキルとは、あるスキルを学ぶ前に学ばなければならないスキルです.
例えば、現在スキル順が「スパーク」→「発光ボルト」→「カッター」の場合、学習カッターはまず「発光ボルト」を学び、「発光ボルト」はまず「スパーク」を学ぶ.
以上の手順にない他のスキル(癒しなど)は順番に学ぶことができます.そのため、スパーク→癒し→ハイライトボルト→メスなどのスキルツリーを使用することは可能ですが、メス→スパークまたはハイライトボルト→スパーク→癒し→メスなどのスキルツリーを使用することは不可能です.
先行スキル順スキルとプレイヤーが作成したスキルツリー1の配列スキルtreeをパラメータとして付与する場合は、できるだけスキルツリーの個数を返すsolution関数を書き出します.
せいげんじょうけん
スキルはアルファベット大文字でマークされ、すべての文字列はアルファベット大文字のみで構成されています.
スキル順序とスキルツリーは文字列で表されます.
例えば、C→B→DであればCBDと表記する.
前置スキル順序スキルの長さは1以上26以下で、スキルは繰り返してはいけません.
skill treesは、長さが1または20未満の配列である.
skill treesの要素はスキルを表す文字列です.
skill treesの要素の長さは2または26未満であり、このスキルは繰り返しません.
I/O例
skill : CBD
skill_trees : [BACDE, CBADF, AECB, BDA]
return : 2
I/O例説明
BACDE:Bスキルの前にCスキルを学ぶ.不可能なスキル
CBADF:可能なスキルツリー.
Apache:可能なスキルツリー.
BDA:Bスキルを学ぶ前に、Cスキルを学ばなければなりません.不可能なスキルツリー
私が解読したコード
まず、skill treeリストの各要素が実行可能かどうかを決定するために、関数check()が実装される.
可能であれば、Trueに戻ってそれを計算すれば、答えは正しい!
def check(skill, string): ## skill과 skill_trees의 원소를 인자로 받음
check = [0]*len(skill) ## 스킬 순서대로 나왔으면 해당 스킬에 1을 표시하는 리스트
for i in string:
if i in skill:
index = skill.index(i) ## 스킬의 인덱스 추출
## index가 0일 경우만 임으로 1을 지정해줌
if index == 0:
check[index] = 1
## 그전에 선행 스킬이 모두 나오지 않았다면 False 반환
elif index != sum(check[:index]):
return False
## 선행 스킬이 나와있으면 i의 인덱스에 해당하는 check를 1로
else:
check[index] = 1
return True
def solution(skill, skill_trees):
answer = 0
for i in skill_trees:
if check(skill, i) == True:
answer += 1
return answer
Reference
この問題について([テストエンコーディング例]スキルツリー), 我々は、より多くの情報をここで見つけました https://velog.io/@dltjrdud37/코딩테스트-예제-스킬트리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol