From 394d0ed72c7658bdccc38e03da5b4efb2d3c6b3f Mon Sep 17 00:00:00 2001 From: sungjinwi <0202wsj@gmail.com> Date: Sat, 5 Apr 2025 01:09:03 +0900 Subject: [PATCH 1/5] contains-duplicate solution --- contains-duplicate/sungjinwi.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 contains-duplicate/sungjinwi.cpp diff --git a/contains-duplicate/sungjinwi.cpp b/contains-duplicate/sungjinwi.cpp new file mode 100644 index 000000000..de522d82a --- /dev/null +++ b/contains-duplicate/sungjinwi.cpp @@ -0,0 +1,25 @@ +/* + set를 통해 중복제거를 한 후 기존 nums와 길이 비교 + + nums의 길이 N + + TC : O(N) + set를 만드는 데 전체 순회하며 N 시간 소모 + + SC : O(N) + set 만들 때 N의 메모리 할당 +*/ +#include +#include +using namespace std; + +class Solution { +public: + bool containsDuplicate(vector& nums) { + unordered_set us(nums.begin(), nums.end()); + if (nums.size() == us.size()) + return false; + else + return true; + } +}; From 4d3215215a5ac41a7f07f8d3b80dfdd4608bf98e Mon Sep 17 00:00:00 2001 From: sungjinwi <0202wsj@gmail.com> Date: Sun, 6 Apr 2025 00:45:59 +0900 Subject: [PATCH 2/5] #219 two-sum solution --- two-sum/sungjinwi.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 two-sum/sungjinwi.cpp diff --git a/two-sum/sungjinwi.cpp b/two-sum/sungjinwi.cpp new file mode 100644 index 000000000..f7f1d2634 --- /dev/null +++ b/two-sum/sungjinwi.cpp @@ -0,0 +1,36 @@ +/* + 풀이 : + 타깃을 뺸 complement 값을 구하고 해시테이블(unordered_map)에 존재하면 리턴 + 없으면 해시테이블에 값 : 인덱스 형태로 저장 + + nums의 size: N + TC : O(N) + size만큼 for문 반복 + SC : O(N) + size만큼 해시테이블에 추가 +*/ + +#include +#include +using namespace std; + +class Solution { +public: + vector twoSum(vector& nums, int target) { + unordered_map umap; + vector result; + for (int i = 0; i < nums.size(); i++) + { + int complement = target - nums[i]; + if (umap.find(complement) == umap.end()) + umap[nums[i]] = i; + else + { + result.push_back(i); + result.push_back(umap[complement]); + return result; + } + } + return result; + } +}; From 969f0a802d83a0edf63d816a0e1644c2b89f87be Mon Sep 17 00:00:00 2001 From: sungjinwi <0202wsj@gmail.com> Date: Sun, 6 Apr 2025 01:53:11 +0900 Subject: [PATCH 3/5] #237 top-k-frequent-elements solution --- top-k-frequent-elements/sungjinwi.cpp | 44 +++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 top-k-frequent-elements/sungjinwi.cpp diff --git a/top-k-frequent-elements/sungjinwi.cpp b/top-k-frequent-elements/sungjinwi.cpp new file mode 100644 index 000000000..49624e0d3 --- /dev/null +++ b/top-k-frequent-elements/sungjinwi.cpp @@ -0,0 +1,44 @@ +/* + 풀이 : + 해시테이블에 숫자 : 빈도로 저장 후 freq 이중배열에 index를 frequency로 삼아 저장한다 + 이중배열의 뒤에서부터 탐색하면서 k개를 result에 삽입 + + nums 개수 N + TC : O(N) + 전체 개수 N에 대해 for문 각각 돌아서 + SC : O(N) + 해시테이블과 이중배열 모두 N에 비례 +*/ + +#include +#include +using namespace std; + +class Solution { +public: + vector topKFrequent(vector& nums, int k) { + unordered_map umap; + for (auto& num : nums) + { + umap[num]++; + } + + vector> freq(nums.size() + 1); + for (auto& pair : umap) + { + freq[pair.second].push_back(pair.first); + } + + vector result; + for (int i = nums.size(); i > 0 && result.size() < k; i--) + { + for (auto& num : freq[i]) + { + result.push_back(num); + if (result.size() == k) + break ; + } + } + return result; + } +}; From 792f1cd7ba03a3a1c9f3c0a2bcc846289de27b1b Mon Sep 17 00:00:00 2001 From: sungjinwi <0202wsj@gmail.com> Date: Sun, 6 Apr 2025 02:43:25 +0900 Subject: [PATCH 4/5] #240 longest-consecutive-sequence solution --- longest-consecutive-sequence/sungjinwi.cpp | 37 ++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 longest-consecutive-sequence/sungjinwi.cpp diff --git a/longest-consecutive-sequence/sungjinwi.cpp b/longest-consecutive-sequence/sungjinwi.cpp new file mode 100644 index 000000000..8322c7481 --- /dev/null +++ b/longest-consecutive-sequence/sungjinwi.cpp @@ -0,0 +1,37 @@ +/* + 풀이 : + 해시테이블에 nums를 담은 뒤 num - 1이 존재하지 않는 num에 대해서만 (중간점에서는 계산하지 않기 위해) + 길이를 증가시켜 나가며 연속된 수의 개수를 구하고 cur의 max값 ans를 구한다 + + nums의 갯수 N + TC : O(N) + 이중 for문이지만 내부 for문은 num - 1이 없을때만 연속된 해시테이블 내부 값에 대해서 수행하기 때문에 O(N) + + SC : O(N) + 해시테이블의 크기는 N에 비례 +*/ + +#include +#include +using namespace std; + +class Solution { +public: + int longestConsecutive(vector& nums) { + int cur; + int ans = 0; + unordered_set us(nums.begin(), nums.end()); + + for (auto& num : us) + { + if (us.find(num - 1) == us.end()) + { + cur = 1; + for(int i = 1; us.find(num + i) != us.end(); i++) + cur++; + ans = max(ans, cur); + } + } + return ans; + } +}; From c2652f90e6d26a4364c2e9a4ef0abf34bd3d0473 Mon Sep 17 00:00:00 2001 From: sungjinwi <0202wsj@gmail.com> Date: Sun, 6 Apr 2025 03:03:54 +0900 Subject: [PATCH 5/5] #264 house-robber solution --- house-robber/sungjinwi.cpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 house-robber/sungjinwi.cpp diff --git a/house-robber/sungjinwi.cpp b/house-robber/sungjinwi.cpp new file mode 100644 index 000000000..99a9e77fe --- /dev/null +++ b/house-robber/sungjinwi.cpp @@ -0,0 +1,31 @@ +/* + 풀이 : + 현재 집의 순서를 n이라고 했을 때 값을 업데이트하기 전 cur에는 n - 1 집까지 최대 훔칠 수 있는 돈, prv에는 n - 2집까지 최대 훔칠 수 있는 돈이 저장 + cur를 max(n - 2까지 돈 + n의 돈, n - 1까지의 돈)로 n까지 오면서 훔칠 수 있는 최대 돈으로 업데이트, + prv는 n - 1까지 훔칠 수 있는 최대 돈으로 업데이트 + + nums의 갯수 : N + + TC : O(N) + + SC : O(1) + 배열없이 상수 변수 3개만 추가로 사용 +*/ + +#include +using namespace std; + +class Solution { +public: + int rob(vector& nums) { + int prv = 0, cur = 0; + int tmp; + for (auto& num : nums) + { + tmp = cur; + cur = max(prv + num, cur); + prv = tmp; + } + return cur; + } +};