#include <stdio.h>
int main()
{
char * str[2];
str[0] = "hello!";
str[1] = "jungler";
printf("1. %s\n",str[0]+1); // %s는 문자열을 출력. e부터의 문자열을 출력.
printf("2. %s\n",(str + 1)[0]+2); // 마찬가지로 n부터의 문자열을 출력.
}
📍 출력값:
1. ello!
2. ngler
📍 내가 쓴 답:
1. e
2. n
printf("1. %s\n",str[0]+1);%s는 문자열을 출력함. 접근은 맞았으나, 찾은 글자 이후의 문자열도 같이 출력을 해줘야 됨.
#include <stdio.h>
int main()
{
int numArr[5] = { 11, 22, 33, 44, 55 };
int *numPtrA;
void *ptr;
numPtrA = &numArr[2];
ptr = numArr;
printf("%d\n", /** 변수는numPtrA만을사용하세요. **/);
printf("%d\n", /** 변수는ptr만을사용하세요. **/);
return 0;
}
- *(numPtrA + 2) => good!
- ptr - 1 => 이게 틀렸음.
ptr 은 void 형식이므로 int 형식으로 만들어줘야함.(int *)ptr
이 후 주소값에 +1을 해줌. 답 =>*((int *)ptr + 1)
리프노드의 자식들이 nil이 아니라 null이 된다.
마지막 테스트에서 단 4개만 성공하고 실패가 떴다.
리프노드의 자식이 nil이 아닌 null로 표시되는것을 디버거로 확인.
nil 초기화를 잘못했나, erase나 insert함수가 잘못됐나 fixup만 몇번을 갈아엎었는지 모르겠다.
근데 애당초 fixup이 잘못됐다면, 다른 테스트들이 통과됐을리가 없다.
void rotate_right(rbtree *t, node_t *y)
{
node_t *x;
// x를 설정
x = y->left;
// x의 오른쪽 서브트리를 y의 왼쪽 서브트리로 옮긴다.
y->left = x->right;
if (x->right->parent != t->nil)
{
x->right->parent = y;
}
// y의 부모를 x로 연결한다.
x->parent = y->parent;
if (y->parent == t->nil)
{
t->root = x;
}
else if (y == y->parent->left)
{
y->parent->left = x;
}
else
{
y->parent->right = x;
}
// y를 x의 오른쪽으로 놓는다.
x->right = y;
y->parent = x;
}
➡️ 결론은 이부분이 틀렸음.
리프노드의 자식이 NULL인 것이 아닌 리프노드 대신 nil에 접근하고 있는 것이 아닐까 라는 생각에 찾아보다 발견했다.
if (x->right->parent != t->nil)
👇🏽
if (x->right != t->nil)