본문 바로가기

ALGORITHM/c&c++ leetcode

(22)
[C/LeetCode] Arithmetic Slices 뭘 풀지 모를때는 역시 daily 추천 문제를 푸는 것이 좋다 Difficulty: Medium Submission: 177ms/ 6.1MB 여전히 효율이 좋은 코드를 생각하는 버릇이 안들었다. 일단 돌아가면 되지 라는 무지성 코딩 제발 그만해 이러다간 다 죽어 int numberOfArithmeticSlices(int* nums, int numsSize){ int result = 0; int diff = 0; int signal = 1; // 3개부터 시작해서 몇개까지로 이루어진 sequence를 만들 수 있는지 for(int i = 3;i
[c/LeetCode] Single Number 1. 첫 번째 아이디어 그냥 배열 돌면서 같은 값이 있는 경우는 flag를 0으로 해서 탈출하고, 같은 값이 없으면 1이 되므로 return 하도록 작성함 아쉽지만 o(n^2)이다. 856ms/ 7.3MB int singleNumber(int* nums, int numsSize){ int a; int flag; for(int i = 0; i < numsSize; i++) { a = nums[i]; flag = 1; for(int j = 0; j < numsSize; j++) { if (a == nums[j] && i != j) { flag = 0; break; } } if (flag) { return a; } } return 1; } 2. 두 번째 아이디어 (빌려옴) XOR 연산자인 ^를 사용하는 것이다..
[c/LeetCode] Median of Two Sorted Arrays 1. 첫 번째 아이디어 일단 아무 생각 없이 배열 동적할당 해서 무지성으로 값을 넣은 다음에 정렬해서 중앙값을 구하자고 생각했음. 근데 돌아가긴 하는데, 애초에 정렬을 버블 정렬을 썼더니 (m+n)^2이 나와서 시간이 85ms / 6.9MB 라는 엄청나게 쓰레기 같은 성능의 코드를 작성해버렸음... 무지성 코딩 멈춰 double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size){ int resultSize = nums1Size + nums2Size; int *resultList = malloc(sizeof(int) * resultSize); int index = 0; for(int i = 0;i < nums1Size;..
[c && swift/LeetCode] Reverse Integer 1. c version 4ms/ 5.5MB 왜 이렇게 오래 걸린거지 int reverse(int x){ long temp = 0; long value = x; if (x 2147483647 || temp < -2147483648) return 0; return temp; } 2. swift version swift는 long type이 그냥 Int이기 때문에 c보다 오버플로우 언더플로우에 유연하긴 함 c에서의 자료형 swift 에서의 자료형 signed..
[c/LeetCode] Add Two Numbers 1. 문제 (난이도 : medium) 2. 첫 번째 접근 아이디어 링크드 리스트를 돌면서 숫자로 가져와서 더하면 빠르게 될 것이라고 예상했음 그래서 while (temp != NULL) { val1 = val1 * 10 + temp->val; temp = temp->next; } 이렇게 돌면서 가져온 숫자를 거꾸로 만들어야 하니까 while (val1) { tmp1 = tmp1 * 10 + (val1 % 10); val1 = val1 / 10; } 이렇게 변수를 하나 더 설정해서 숫자로 만드는 작업을 했음 당연히 타입은 unsigned long long으로 나름 오버플로우를 생각하긴 했음 그 뒤에 숫자를 더하고 while문을 돌면서 malloc해준거에 %10으로 나머지 숫자부터 찾아서 거꾸로 넣는 작업을..
[c/LeetCode] Two Sum 난 아직.. returnSize의 역할을 이해 못했다. 어짜피 문제에서 exactly one solution 이라고 강조까지 해놨으니, size는 당연히 2인데 굳이 저걸 포인터로 받아오는 이유는 뭐지? int* twoSum(int* nums, int numsSize, int target, int* returnSize){ int *result =(int *)malloc(sizeof(int) * 2); for(int i=0;i