アルファコード(DFS)
13368 ワード
作成日:2022年2月12日午後4:11
で私が実現したDFS関数では、preパラメータですぐにL数字を文字に変換するのではなく、L数字を次に変換し、L+1数字と併せて文字に変換した場合に数を求めました. の模範解答では,1から26の数字(文字で計算するとA~Z)を複文ループでコード中のL数字と比較する. iがLに等しい場合はres(1桁のみ)に追加し、iが2桁の場合はLと1桁を比較し、Lと2桁が同じ場合はresに追加し、次のパラメータは2つのスペース(2桁のため) をスキップします.
例えば、は、コードが251114の場合、L=0の場合、iは2の場合、resにB、iは25の場合、Lの2番目の数字2とL+1の数字5の合計を追加するので、resにY(25を文字に変更)を追加し、2つのスペースをスキップして再帰関数を呼び出す.
インプリメンテーションコード
# 알파코드 (DFS)
import sys
#sys.stdin = open("in2.txt", "rt")
def numToChr(num):
return chr(num+64)
def DFS(L, pre):
global cnt
if L == len(code):
if pre == 0:
for x in res:
if x != "":
print(x, end='')
print()
cnt += 1
else:
if pre == 0 and code[L] != 0:
#채택
res[L] = numToChr(code[L])
DFS(L+1, 0)
res[L] = ""
#채택x
DFS(L+1, code[L])
else:
if 10*pre+code[L] > 26:
pass
else:
if pre != 0:
#무조건 채택
res[L] = numToChr(10*pre+code[L])
DFS(L+1, 0)
res[L] = ""
if __name__ == "__main__":
code = list(map(int,list(input())))
res = [""]*len(code)
cnt = 0
DFS(0, 0)
print(cnt)
模範解答
import sys
sys.stdin=open("input.txt", "r")
def DFS(L, P):
global cnt
if L==n:
cnt+=1
for j in range(P):
print(chr(res[j]+64), end='')
print()
else:
for i in range(1, 27):
if code[L]==i:
res[P]=i
DFS(L+1, P+1)
elif i>=10 and code[L]==i//10 and code[L+1]==i%10:
res[P]=i
DFS(L+2, P+1)
if __name__=="__main__":
code=list(map(int, input()))
n=len(code)
code.insert(n, -1)
res=[0]*(n+3)
cnt=0
DFS(0, 0)
print(cnt)
差異
例えば、
Reference
この問題について(アルファコード(DFS)), 我々は、より多くの情報をここで見つけました https://velog.io/@lsj8706/알파코드-DFSテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol