코드에서 iii는 잘못된 변수입니다; 아마도 i로 바꿔야 합니다.
또한, f 함수는 재귀적으로 많은 양의 계산을 하기 때문에 실행 시간이 매우 길어질 수 있습니다.
이를 해결하기 위해 아래와 같이 이미 계산된 결과를 저장하는 메모이제이션 기법을 적용할 수 있습니다.
#include <stdio.h> #include <string.h> #define MAX_N 27 // 13 + 13보다 크거나 같아야 합니다. int memo[MAX_N]; int f(int n) { if(n == 0) return 1; if(memo[n] != -1) return memo[n]; int sum = 0; for(int i = 0; i < n; i++){ sum += f(i); } return memo[n] = sum % 13; } int main() { // 메모이제이션 배열 초기화 memset(memo, -1, sizeof(memo)); char ans[] = "rgjgmbuyhbfcx"; for(int i = 0; i < 13; i++){ ans[i] ^= f(13 + i); // iii 대신 i를 사용합니다. } puts(ans); return 0; }
코드에서 iii는 잘못된 변수입니다; 아마도 i로 바꿔야 합니다.
또한, f 함수는 재귀적으로 많은 양의 계산을 하기 때문에 실행 시간이 매우 길어질 수 있습니다.
이를 해결하기 위해 아래와 같이 이미 계산된 결과를 저장하는 메모이제이션 기법을 적용할 수 있습니다.
#include <stdio.h> #include <string.h> #define MAX_N 27 // 13 + 13보다 크거나 같아야 합니다. int memo[MAX_N]; int f(int n) { if(n == 0) return 1; if(memo[n] != -1) return memo[n]; int sum = 0; for(int i = 0; i < n; i++){ sum += f(i); } return memo[n] = sum % 13; } int main() { // 메모이제이션 배열 초기화 memset(memo, -1, sizeof(memo)); char ans[] = "rgjgmbuyhbfcx"; for(int i = 0; i < 13; i++){ ans[i] ^= f(13 + i); // iii 대신 i를 사용합니다. } puts(ans); return 0; }