Skip to content

Commit c1be3fb

Browse files
authored
Merge pull request #2083 from hyunolike/main
[hyunolike] WEEK 02 solutions
2 parents 26f5227 + 50f2b9d commit c1be3fb

File tree

5 files changed

+129
-0
lines changed

5 files changed

+129
-0
lines changed

3sum/hyunolike.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
class Solution {
2+
public List<List<Integer>> threeSum(int[] nums) {
3+
List<List<Integer>> result = new ArrayList<>();
4+
5+
int n = nums.length;
6+
if (n < 3) return result;
7+
8+
Arrays.sort(nums);
9+
10+
for(int i = 0; i < n - 2; i++) {
11+
if(i > 0 && nums[i] == nums[i-1]) continue;
12+
13+
int left = i + 1;
14+
int right = n - 1;
15+
16+
while(left < right) {
17+
int sum = nums[i] + nums[left] + nums[right];
18+
19+
if(sum < 0){
20+
left++;
21+
}
22+
else if(sum > 0) {
23+
right --;
24+
}
25+
else {
26+
// sum == 0 → 조합 하나 찾음
27+
result.add(Arrays.asList(nums[i], nums[left], nums[right]));
28+
29+
// left, right 중복값 스킵
30+
int leftVal = nums[left];
31+
int rightVal = nums[right];
32+
33+
while (left < right && nums[left] == leftVal) left++;
34+
while (left < right && nums[right] == rightVal) right--;
35+
}
36+
}
37+
}
38+
39+
return result;
40+
}
41+
}

climbing-stairs/hyunolike.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution {
2+
public int climbStairs(int n) {
3+
4+
// 경우의 수 하기 >> 피보나치?
5+
// ways(n) = ways(n-1) + ways(n-2)
6+
7+
if(n == 1) return 1;
8+
if(n == 2) return 2;
9+
10+
int[] dp = new int[n+1];
11+
dp[1] = 1;
12+
dp[2] = 2;
13+
14+
for(int i = 3; i <= n; i++) {
15+
dp[i] = dp[i-1] + dp[i-2];
16+
}
17+
18+
return dp[n];
19+
}
20+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Solution {
2+
public int[] productExceptSelf(int[] nums) {
3+
4+
int n = nums.length;
5+
int[] ans = new int[n];
6+
7+
// 1. 왼족 곱
8+
int left = 1;
9+
for(int i = 0; i < n; i++) {
10+
ans[i] = left;
11+
left *= nums[i];
12+
}
13+
14+
// 2. 오른쪽 곱
15+
int right = 1;
16+
for(int i = n-1; i >=0; i--){
17+
ans[i] *= right;
18+
right *= nums[i];
19+
}
20+
21+
return ans;
22+
}
23+
}

valid-anagram/hyunolike.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution {
2+
public boolean isAnagram(String s, String t) {
3+
// 각 문자열 배열 char[] 로 변환
4+
// 그리고 비교 (?)
5+
6+
char[] sArray = s.toCharArray();
7+
char[] tArray = t.toCharArray();
8+
9+
Arrays.sort(sArray);
10+
Arrays.sort(tArray);
11+
12+
return Arrays.equals(sArray, tArray);
13+
}
14+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* public class TreeNode {
4+
* int val;
5+
* TreeNode left;
6+
* TreeNode right;
7+
* TreeNode() {}
8+
* TreeNode(int val) { this.val = val; }
9+
* TreeNode(int val, TreeNode left, TreeNode right) {
10+
* this.val = val;
11+
* this.left = left;
12+
* this.right = right;
13+
* }
14+
* }
15+
*/
16+
class Solution {
17+
public boolean isValidBST(TreeNode root) {
18+
return isValid(root, null, null);
19+
}
20+
21+
private boolean isValid(TreeNode node, Integer min, Integer max) {
22+
if (node == null) {
23+
return true;
24+
}
25+
26+
if (min != null && node.val <= min) return false;
27+
if (max != null && node.val >= max) return false;
28+
29+
return isValid(node.left, min, node.val) && isValid(node.right, node.val, max);
30+
}
31+
}

0 commit comments

Comments
 (0)