TRAVERSAL 질문입니다. hyunbin #include #include int C, N, postorder[100], inorder[100], preorder[100]; int findIndex(int val); int *slice(int arr[], int a, int b); void printPostOrder(int preorder[], int inorder[]); int main(void){ int i, j; scanf("%d", &C); for(i = 0 ; i < C ; i ++){ //////////////////////////// memset(preorder, 0, sizeof(int) * 100); memset(inorder, 0, sizeof(int) * 100); //////////////////////////// scanf("%d", &N); for(j = 0 ; j < N ; j ++) scanf("%d", &preorder[j]); for(j = 0 ; j < N ; j ++) scanf("%d", &inorder[j]); printPostOrder(preorder, inorder); printf("\n"); } return 0; } int findIndex(int arr[], int val){ int i, j, size = 0; for(i = 0 ; i < N ; i ++){ if(arr[i] != 0) size += 1; } for(i = 0 ; i < size ; i ++){ if(arr[i] == val) return i; } return -1; } int* slice(int arr[], int a, int b){ int tmp[100], i, pos; memset(tmp, 0, sizeof(int) * 100); for(i = a , pos = 0; i < b + 1 ; i ++, pos ++){ tmp[pos] = arr[i]; } return tmp; } void printPostOrder(int preord[], int inord[]){ int root, L, i, size = 0; int tmp1[100], tmp2[100], tmp3[100], tmp4[100]; memset(tmp1, 0, sizeof(int) * 100); memset(tmp2, 0, sizeof(int) * 100); memset(tmp3, 0, sizeof(int) * 100); memset(tmp4, 0, sizeof(int) * 100); for(i = 0 ; i < N ; i ++){ if(preord[i] > 0) size += 1; } if(size == 0) return ; root = preord[0]; L = findIndex(inord, root); // // 트리 왼쪽 memcpy(tmp1, slice(preord, 1, L), sizeof(int) * 100); memcpy(tmp2, slice(inord, 0, L - 1), sizeof(int) * 100); // 트리 오른쪽 memcpy(tmp3, slice(preord, L + 1, size - 1), sizeof(int) * 100); memcpy(tmp4, slice(inord, L + 1, size - 1), sizeof(int) * 100); printPostOrder(tmp1, tmp2); printPostOrder(tmp3, tmp4); printf("%d ", root); } 안녕하세요. TRAVERSAL문제를 푸는데 자꾸 오답이 떠서 질문드립니다. '프로그래밍 대회에서 배우는 알고리즘 문제해결전략'에서 도움을 받고 이 문제를 풀었는데 자꾸 오답이 뜨네요. 제가 어디서 실수하고있는지를 잘모르겠습니다. 알고스팟에서의 예제 말고 다른 예제도 돌렸는데 제대로 나와서... 10년 전
2개의 댓글이 있습니다. Sharifa 코드를 실행해보면 slice 함수에서 임시배열을 리턴하고 있다는 경고가 뜹니다. tmp배열 선언을 malloc으로 하면 정답이 나옵니다. 10년 전 link hyunbin 감사합니다.......으아......... 10년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
hyunbin
#include
#include
int C, N, postorder[100], inorder[100], preorder[100];
int findIndex(int val);
int *slice(int arr[], int a, int b);
void printPostOrder(int preorder[], int inorder[]);
int main(void){
}
int findIndex(int arr[], int val){
}
int* slice(int arr[], int a, int b){
}
void printPostOrder(int preord[], int inord[]){
}
안녕하세요. TRAVERSAL문제를 푸는데 자꾸 오답이 떠서 질문드립니다. '프로그래밍 대회에서 배우는 알고리즘 문제해결전략'에서 도움을 받고 이 문제를 풀었는데 자꾸 오답이 뜨네요.
제가 어디서 실수하고있는지를 잘모르겠습니다.
알고스팟에서의 예제 말고 다른 예제도 돌렸는데 제대로 나와서...
10년 전