제거하려는 폭탄이 있고 시간이 다되었다고 가정해 봅시다! 길이가 n이고 키가 k인 원형 배열 코드가 있습니다. 이제 코드를 해독하려면 모든 숫자를 바꿔야 합니다. 모든 숫자가 동시에 대체됩니다. 몇 가지 규칙이 있습니다 -
-
k> 0이면 i번째 숫자를 다음 k 숫자의 합으로 바꿉니다.
-
k <0이면 i번째 숫자를 이전 k개의 숫자의 합으로 바꿉니다.
-
k =0이면 i번째 숫자를 0으로 바꿉니다.
여기에서 코드는 원형이므로 code[n-1]의 다음 요소는 code[0]이고 code[0]의 이전 요소는 code[n-1]입니다. 마지막으로 해독된 코드를 반환해야 합니다.
따라서 입력이 code =[8,2,3,5], k =3과 같으면 출력은 [10, 16, 15, 13]이 됩니다. 왜냐하면 각 키에 대해 다음 세 요소 합계로 대체하기 때문입니다. , 따라서 code[0]은 10, code[1]은 16, code[2]는 15, code[3]은 13이 됩니다.
이 문제를 해결하려면 다음 단계를 따르십시오. &mius;
-
디코드 :=새 목록
-
범위 0에서 코드 크기 - 1에 있는 i의 경우 수행
-
k> 0이면
-
합계 :=0
-
j :=i+1
-
m :=k
-
m이 0이 아닌 동안 수행
-
합계 :=합계 + 코드[j 모드 코드 길이]
-
m :=m - 1
-
j :=j + 1
-
-
디코딩 끝에 합계 삽입
-
-
그렇지 않으면 k가 0과 같을 때
-
디코딩 끝에 0 삽입
-
-
그렇지 않으면
-
합계 :=0
-
j :=i-1
-
m :=k
-
m이 0이 아닌 동안 수행
-
합계 :=합계 + 코드[j 모드 코드 길이]
-
m :=m + 1
-
j :=j - 1
-
-
디코딩 끝에 합계 삽입
-
-
-
반환 디코딩
예제(파이썬)
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def solve(code, k):디코드 =[] for i in range(len(code)):if k> 0:sum =0 j =i+1 m =k while(m):sum+=code [j%len(code)] m-=1 j+=1 decode.append(sum) elif k ==0:decode.append(0) else:sum =0 j =i-1 m =k while(m) :sum+=code[j%len(code)] m+=1 j-=1 decode.append(sum) return decodecode =[8,2,3,5]k =3print(solve(code, k))사전>입력
[8,2,3,5], 3출력
[10, 16, 15, 13]