본문 바로가기

Problem solving/LeetCode22

[LeetCode] 26. Remove Duplicates from Sorted Array (C++) 문제 non-decreasing 순서로 정렬된 정수 배열이 주어진다. 각 요소가 한번만 나타나도록 중복 항목을 제자리에서 제거하기 다른 순서는 동일하게 유지되어야 한다. 남은 고유 숫자의 개수와 제거된 배열 구하기 생각할 것 set을 사용해보자 a. set에 모든 값을 넣고 중복된 값이 제거된 set을 num에 할당하기 b. num의 크기를 리턴하기 c. 이 방법은 메모리가 좀 더 필요하다. 또 다른 방법 a. nums[i] ≠ nums[i-1] 일 경우 앞으로 당겨서 대입하기 코드 class Solution { public: int removeDuplicates(vector& nums) { set s; for(int i=0; i 2023. 6. 30.
[LeetCode] 23. Merge k Sorted Lists (C++) 문제 배열 k가 정렬된 링크드리스트로 주어졌을 때, 각 링크드리스트를 하나의 오름차순으로 정렬된 링크드리스트로 나타내기 생각할 것 Min Heap을 사용해보기 각 리스트의 head를 모두 heap에 넣고, 제거하면서 연결하는 방법으로 풀어보았다. 💡 priority_queue 선언 방법 : priority_queue 구조체를 priority queue에 넣는 방법 struct cmp { bool operator()(const ListNode* n1, const ListNode* n2) { return n1 -> val > n2 -> val; // 오름차순 정렬 (일반적인 정렬기준과 반대) } }; priority_queue pq; 코드 /** * Definition for singly-linked lis.. 2023. 6. 30.
[LeetCode] 22. Generate Parentheses (C++) 문제 n개의 괄호쌍이 주어졌을 때 가능한 모든 조합 생각할 것 재귀를 사용해야할 것이다. 올바른 괄호의 조건을 생각해보기 여는 괄호가 n개여야 한다. 닫는 괄호는 열려있는 괄호보다 많으면 안된다. 먼저 열고나서 닫아줘야 한다. 코드 class Solution { public: vector res; void dfs(int open, int close, int n, string str){ if(str.size() == n * 2){ res.push_back(str); return; } if(open < n) dfs(open+1, close, n, str + "("); if(close < open) dfs(open, close+1, n, str + ")"); } vector generateParenthesis.. 2023. 6. 30.
[LeetCode] 21. Merge Two Sorted Lists (C++) 문제 정렬된 두개의 링크드 리스트가 주어진다. 두개의 리스트를 하나의 정렬된 리스트로 합병하기 생각할 것 결괏값을 리턴하기 위해 미리 head를 저장해 둘 노드 생성하기 ListNode* resH = new ListNode(); ListNode* res = resH; ... return resH -> next; 값의 크기를 하나씩 비교하기 한 쪽의 리스트가 먼저 끝나면 다른 하나의 리스트를 연결하고 반복을 종료하기 코드 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), nex.. 2023. 6. 30.