diff --git a/contains-duplicate/aa601.c b/contains-duplicate/aa601.c new file mode 100644 index 000000000..c0c3c52a1 --- /dev/null +++ b/contains-duplicate/aa601.c @@ -0,0 +1,60 @@ +#include +#include + +void merge(int *nums, int left, int mid, int right) +{ + int i; + int j; + int k; + int leftArr[mid - left + 1]; + int rightArr[right - mid]; + + i = -1; + while (++i < mid - left + 1) // 왼쪽 분할된 부분 넣기 + leftArr[i] = nums[left + i]; + i = -1; + while (++i < right - mid) // 오른쪽 분할된 부분 넣기 + rightArr[i] = nums[mid + i + 1]; + i = 0; + j = 0; + k = left; // **** nums배열인덱스 => left부터 시작 + // 나누어진 배열끼리 비교해서 nums배열 재배치 + while ((i < mid - left + 1) && (j < right - mid)) { + if (leftArr[i] <= rightArr[j]) + nums[k] = leftArr[i++]; + else + nums[k] = rightArr[j++]; + ++k; + } + while (i < mid - left + 1) // left배열 남아있으면 마저 삽입 + nums[k++] = leftArr[i++]; + while (j < right - mid) // right배열 남아있으면 마저 삽입 + nums[k++] = rightArr[j++]; +} + +void mergeSort(int *nums, int left, int right) { + int mid; + + if (left < right) + { + mid = (left + right) / 2; + mergeSort(nums, left, mid); // 왼쪽분할 + mergeSort(nums, mid + 1, right); // 오른쪽분할 + merge(nums, left, mid, right); + } +} + +bool containsDuplicate(int* nums, int numsSize) { + int i; + + mergeSort(nums, 0, numsSize - 1); + i = -1; + while (++i + 1 < numsSize) { + if (nums[i] == nums[i + 1]) + return (true); + } + return (false); +} + + + diff --git a/house-robber/aa601.c b/house-robber/aa601.c new file mode 100644 index 000000000..3e3ef85a8 --- /dev/null +++ b/house-robber/aa601.c @@ -0,0 +1,40 @@ +int rob(int* nums, int numsSize) { + int *dp; + int max; + int i; + int j; + + // dp에 nums 복사 + dp = malloc(sizeof(int) * numsSize); + if (!dp) + return (0); + i = -1; + while (++i < numsSize) { + dp[i] = nums[i]; + } + + // dp 시작 + i = 0; + j = 0; + while (++i < numsSize) { + j = 0; + max = dp[i]; + while (j + 1 < i) { + if (max < dp[i] + dp[j]) + max = dp[i] + dp[j]; + ++j; + } + dp[i] = max; + } + + // dp 배열의 최종 max값 리턴 + i = -1; + max = dp[0]; + while (++i < numsSize) { + if (max < dp[i]) + max = dp[i]; + } + free(dp); + return (max); +} + diff --git a/valid-palindrome/aa601.c b/valid-palindrome/aa601.c new file mode 100644 index 000000000..83dd4dab3 --- /dev/null +++ b/valid-palindrome/aa601.c @@ -0,0 +1,27 @@ +bool isPalindrome(char* s) { + int i; + int j; + int size; + char tmp; + int flag; + + i = 0; + size = strlen(s); + j = size - 1; + flag = 1; + while (i < j) { + if (!isalnum(s[i])) { + ++i; + continue ; + } + else if (!isalnum(s[j])) { + --j; + continue ; + } + if (tolower(s[i++]) != tolower(s[j--])) { + flag = 0; + break ; + } + } + return (flag); +}