Skip to content

Commit cec4667

Browse files
authored
Merge branch 'DaleStudy:main' into main
2 parents 4767b91 + 123611e commit cec4667

File tree

13 files changed

+498
-0
lines changed

13 files changed

+498
-0
lines changed

3sum/daiyongg-kim.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
class Solution:
2+
def threeSum(self, nums: List[int]) -> List[List[int]]:
3+
nums.sort()
4+
5+
result = []
6+
n = len(nums)
7+
8+
for i in range(n - 2):
9+
10+
if i > 0 and nums[i] == nums[i - 1]:
11+
continue
12+
13+
left = i + 1
14+
right = n - 1
15+
while left < right:
16+
current_sum = nums[i] + nums[left] + nums[right]
17+
18+
if current_sum == 0:
19+
result.append([nums[i], nums[left], nums[right]])
20+
21+
while left < right and nums[left] == nums[left + 1]:
22+
left += 1
23+
24+
while left < right and nums[right] == nums[right - 1]:
25+
right -= 1
26+
27+
left += 1
28+
right -= 1
29+
30+
elif current_sum < 0:
31+
left += 1
32+
33+
else:
34+
right -= 1
35+
36+
return result

3sum/ys-han00.cpp

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
// class Solution {
2+
// public:
3+
// vector<vector<int>> threeSum(vector<int>& nums) {
4+
// set<vector<int>> ans;
5+
// map<int, int> counter; // {num : cnt}
6+
// vector<int> targets;
7+
// int target, left, right;
8+
9+
// for(int i = 0; i < nums.size(); i++)
10+
// counter[nums[i]]++;
11+
12+
// for(auto iter : counter)
13+
// targets.push_back(iter.first);
14+
15+
// for(int i = 0; i < targets.size(); i++) {
16+
// target = -1 * targets[i];
17+
18+
// vector<int> new_nums;
19+
// counter[targets[i]]--;
20+
// for(auto iter : counter) {
21+
// for(int j = 0; j < iter.second; j++)
22+
// new_nums.push_back(iter.first);
23+
// }
24+
// left = 0; right = new_nums.size() - 1;
25+
// while(left < right) {
26+
// int sum = new_nums[left] + new_nums[right];
27+
// if(sum == target && targets[i] <= new_nums[left] && new_nums[left] <= new_nums[right])
28+
// ans.insert(vector<int>({targets[i], new_nums[left], new_nums[right]}));
29+
30+
// if(sum < target)
31+
// left++;
32+
// else
33+
// right--;
34+
// }
35+
// counter[targets[i]]++;
36+
// }
37+
38+
// return vector<vector<int>> (ans.begin(), ans.end());
39+
// }
40+
// };
41+
42+
class Solution {
43+
public:
44+
vector<vector<int>> threeSum(vector<int>& nums) {
45+
vector<vector<int>> ans;
46+
int left, right, sum;
47+
48+
sort(nums.begin(), nums.end());
49+
50+
for(int i = 0; i < nums.size(); i++) {
51+
if(i > 0 && nums[i] == nums[i - 1])
52+
continue;
53+
54+
left = i + 1; right = nums.size() - 1;
55+
while(left < right) {
56+
sum = nums[i] + nums[left] + nums[right];
57+
if(sum == 0) {
58+
ans.push_back(vector<int> ({nums[i], nums[left], nums[right]}));
59+
left++; right--;
60+
while(left < right && nums[left] == nums[left - 1])
61+
left++;
62+
while(left < right && nums[right] == nums[right + 1])
63+
right--;
64+
}
65+
else if(sum < 0)
66+
left++;
67+
else if(sum > 0)
68+
right--;
69+
}
70+
}
71+
72+
return ans;
73+
}
74+
};
75+

climbing-stairs/YuuuuuuYu.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* Runtime: 0ms
3+
* Time Complexity: O(n)
4+
*
5+
* Memory: 42.18MB
6+
* Space Complexity: O(n)
7+
*
8+
* Approach: DP를 이용한 점화식 활용
9+
* - n번째 계단에 도달하는 방법은 (n-1)번째 계단에서 한 칸 올라오는 방법과
10+
* (n-2)번째 계단에서 두 칸 올라오는 방법의 합과 같음
11+
*/
12+
class Solution {
13+
public int climbStairs(int n) {
14+
if (n == 1) return 1;
15+
else if (n == 2) return 2;
16+
17+
int[] dp = new int[n+1];
18+
dp[1] = 1;
19+
dp[2] = 2;
20+
for (int i=3; i<dp.length; i++) {
21+
dp[i] = dp[i-1] + dp[i-2];
22+
}
23+
24+
return dp[n];
25+
}
26+
}

climbing-stairs/daiyongg-kim.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution:
2+
def climbStairs(self, n: int) -> int:
3+
if n == 1:
4+
return 1
5+
6+
prev, curr = 1, 2
7+
8+
for i in range(3, n+1):
9+
next = prev + curr
10+
prev = curr
11+
curr = next
12+
13+
return curr

climbing-stairs/ys-han00.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
public:
3+
int climbStairs(int n) {
4+
vector<int> fibo(46, 0);
5+
6+
fibo[1] = 1;
7+
fibo[2] = 2;
8+
9+
if(n <= 2)
10+
return fibo[n];
11+
12+
for(int i = 3; i <= n; i++)
13+
fibo[i] = fibo[i - 1] + fibo[i - 2];
14+
15+
return fibo[n];
16+
}
17+
};
18+

linked-list-cycle/DaleSeo.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// Definition for singly-linked list.
2+
#[derive(PartialEq, Eq, Clone, Debug)]
3+
pub struct ListNode {
4+
pub val: i32,
5+
pub next: Option<Box<ListNode>>,
6+
}
7+
8+
// TC: O(n)
9+
// SC: O(1)
10+
impl Solution {
11+
pub fn has_cycle(head: Option<Box<ListNode>>) -> bool {
12+
let mut slow = &head;
13+
let mut fast = &head;
14+
15+
while fast.is_some() && fast.as_ref().unwrap().next.is_some() {
16+
slow = &slow.as_ref().unwrap().next;
17+
fast = &fast.as_ref().unwrap().next.as_ref().unwrap().next;
18+
19+
if slow.as_ref().map(|node| node.as_ref() as *const _)
20+
== fast.as_ref().map(|node| node.as_ref() as *const _)
21+
{
22+
return true;
23+
}
24+
}
25+
26+
false
27+
}
28+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution:
2+
def productExceptSelf(self, nums: List[int]) -> List[int]:
3+
4+
size = len(nums)
5+
6+
#initialize array as 1
7+
result = [1] * size
8+
9+
left_pass = 1
10+
11+
for i in range(size):A
12+
result[i] *= left_pass
13+
left_pass *= nums[i]
14+
15+
right_pass = 1
16+
for i in range(size-1, -1, -1):
17+
result[i] *= right_pass
18+
right_pass *= nums[i]
19+
20+
return result
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
// class Solution {
2+
// public:
3+
// vector<int> productExceptSelf(vector<int>& nums) {
4+
// int mul = 1, zero_cnt = 0;
5+
6+
// for(int i = 0; i < nums.size(); i++) {
7+
// if(nums[i] != 0)
8+
// mul *= nums[i];
9+
// else
10+
// zero_cnt++;
11+
// }
12+
13+
// vector<int> ans = vector<int>(nums.size(), 0);
14+
15+
// if(zero_cnt == 1) {
16+
// for(int i = 0; i < nums.size(); i++) {
17+
// if(nums[i] == 0) {
18+
// ans[i] = mul;
19+
// break;
20+
// }
21+
// }
22+
// } else if(zero_cnt == 0) {
23+
// for(int i = 0; i < nums.size(); i++)
24+
// ans[i] = mul / nums[i];
25+
// }
26+
27+
// return ans;
28+
// }
29+
// };
30+
31+
// class Solution {
32+
// public:
33+
// vector<int> productExceptSelf(vector<int>& nums) {
34+
// int mul = 1, zero_cnt = 0;
35+
// vector<int> prefix(nums.size(), 0), postfix(nums.size(), 0);
36+
37+
// prefix[0] = 1;
38+
// for(int i = 1; i < nums.size(); i++)
39+
// prefix[i] = nums[i - 1] * prefix[i - 1];
40+
41+
// postfix[nums.size() - 1] = 1;
42+
// for(int i = nums.size() - 2; i >= 0; i--)
43+
// postfix[i] = nums[i + 1] * postfix[i + 1];
44+
45+
// vector<int> ans = vector<int>(nums.size(), 0);
46+
// for(int i = 0; i < nums.size(); i++)
47+
// ans[i] = postfix[i] * prefix[i];
48+
49+
// return ans;
50+
// }
51+
// };
52+
53+
class Solution {
54+
public:
55+
vector<int> productExceptSelf(vector<int>& nums) {
56+
vector<int> ans(nums.size(), 1);
57+
int before = 1, after = 1;
58+
59+
for(int i = 0; i < nums.size() - 1; i++) {
60+
before *= nums[i];
61+
ans[i + 1] *= before;
62+
}
63+
64+
for(int i = nums.size() - 1; i > 0; i--) {
65+
after *= nums[i];
66+
ans[i - 1] *= after;
67+
}
68+
69+
return ans;
70+
}
71+
};
72+

valid-anagram/YuuuuuuYu.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/**
2+
* Runtime: 2ms
3+
* Time Complexity: O(n)
4+
*
5+
* Memory: 44.56MB
6+
* Space Complexity: O(1)
7+
*
8+
* Approach: a~z 알파벳 개수 배열을 사용하여 짝을 이루는지 검사
9+
* - 알파벳 개수가 똑같다면 +- 했을 때 0이 됨
10+
*/
11+
class Solution {
12+
public boolean isAnagram(String s, String t) {
13+
if (s.length() != t.length()) return false;
14+
15+
int[] checkedArr = new int[26];
16+
for (char element: s.toCharArray()) {
17+
int index = (int)element - 'a';
18+
checkedArr[index]++;
19+
}
20+
21+
for (char element: t.toCharArray()) {
22+
int index = (int)element - 'a';
23+
checkedArr[index]--;
24+
}
25+
26+
for (int alphabet: checkedArr) {
27+
if (alphabet != 0)
28+
return false;
29+
}
30+
31+
return true;
32+
}
33+
}

valid-anagram/daiyongg-kim.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
class Solution:
2+
def isAnagram(self, s: str, t: str) -> bool:
3+
first = {}
4+
second = {}
5+
6+
for c in s:
7+
if c in first:
8+
first[c] += 1
9+
else:
10+
first[c] = 1
11+
12+
for c in t:
13+
if c in second:
14+
second[c] += 1
15+
else:
16+
second[c] = 1
17+
18+
return first == second
19+
20+
21+
# class Solution:
22+
# def isAnagram(self, s: str, t: str) -> bool:
23+
# first = {}
24+
25+
# if len(s) != len(t):
26+
# return False
27+
28+
# for i in range(len(s)):
29+
# if s[i] in first:
30+
# first[s[i]] += 1
31+
# else:
32+
# first[s[i]] = 1
33+
34+
# for i in range(len(t)):
35+
# if t[i] in first:
36+
# first[t[i]] -= 1
37+
# else:
38+
# return False
39+
40+
# for i in first.values():
41+
# if i != 0:
42+
# return False
43+
44+
# return True

0 commit comments

Comments
 (0)