Skip to content

Commit 82d29e2

Browse files
committed
add week2 algorithm solutions
1 parent 076f90f commit 82d29e2

6 files changed

Lines changed: 171 additions & 0 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
.vscode/
33
.DS_Store
44
.env
5+
*.iml

3sum/xeulbn.java

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import java.util.*;
2+
3+
//시간복잡도 : O(n^2), 공간복잡도 : O(nlogn)
4+
5+
class Solution {
6+
public List<List<Integer>> threeSum(int[] nums) {
7+
8+
Arrays.sort(nums);
9+
List<List<Integer>> answer = new ArrayList<>();
10+
11+
for(int i=0;i<nums.length-2;i++){
12+
if (i>0 && nums[i] == nums[i-1]) {
13+
continue;
14+
}
15+
int leftIndex = i+1;
16+
int rightIndex = nums.length-1;
17+
18+
while(leftIndex<rightIndex){
19+
int sum =nums[i]+nums[leftIndex]+nums[rightIndex];
20+
21+
if(sum==0){
22+
// 정답 추가
23+
List<Integer> tmpList = new ArrayList<>();
24+
tmpList.add(nums[i]);
25+
tmpList.add(nums[leftIndex]);
26+
tmpList.add(nums[rightIndex]);
27+
28+
answer.add(tmpList);
29+
30+
// left++, right--
31+
leftIndex+=1;
32+
rightIndex-=1;
33+
34+
// 중복 제거
35+
while(leftIndex<rightIndex && nums[leftIndex]==nums[leftIndex-1]){
36+
leftIndex+=1;
37+
}
38+
while(leftIndex<rightIndex && nums[rightIndex]==nums[rightIndex+1]){
39+
rightIndex-=1;
40+
}
41+
42+
}else if(sum<0){
43+
leftIndex+=1;
44+
}else{
45+
rightIndex-=1;
46+
}
47+
}
48+
}
49+
50+
return answer;
51+
}
52+
}

climbing-stairs/xeulbn.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import java.util.*;
2+
3+
//시간복잡도 : O(n), 공간복잡도 : O(n)
4+
//이전 두 값만 필요하기에, 공간복잡도는 O(1)까지 최적화가 가능.
5+
6+
class Solution {
7+
public int climbStairs(int n) {
8+
if(n<=2){
9+
return n;
10+
}
11+
12+
int[] dp =new int[n+1];
13+
dp[1]=1;
14+
dp[2]=2;
15+
16+
for(int i=3;i<n+1;i++){
17+
dp[i]=dp[i-1]+dp[i-2];
18+
}
19+
20+
return dp[n];
21+
22+
}
23+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import java.util.*;
2+
3+
//시간 복잡도 O(n), 공간 복잡도 O(1)
4+
5+
class Solution {
6+
public int[] productExceptSelf(int[] nums) {
7+
int n = nums.length;
8+
int[] answer = new int[n];
9+
10+
answer[0] = 1;
11+
for (int i=1; i<n; i++) {
12+
answer[i] = answer[i-1] * nums[i-1];
13+
}
14+
15+
int suffix = 1;
16+
for (int i = n-1; i >= 0; i--) {
17+
answer[i] = answer[i] * suffix;
18+
suffix *= nums[i];
19+
}
20+
21+
return answer;
22+
}
23+
}

valid-anagram/xeulbn.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import java.util.*;
2+
3+
// 시간복잡도 : O(n), 공간복잡도 : O(n)
4+
5+
class Solution {
6+
public boolean isAnagram(String s, String t) {
7+
8+
if(s.length()!=t.length()){
9+
return false;
10+
}
11+
12+
Map<Character,Integer> characterMap = new HashMap<>();
13+
14+
for(int i=0;i<s.length();i++){
15+
char c = s.charAt(i);
16+
characterMap.put(c,characterMap.getOrDefault(c,0)+1);
17+
}
18+
19+
for(int i=0;i<t.length();i++){
20+
char c = t.charAt(i);
21+
22+
if(!characterMap.containsKey(c)){
23+
return false;
24+
}
25+
26+
characterMap.put(c, characterMap.get(c) - 1);
27+
if(characterMap.get(c)<0){
28+
return false;
29+
}
30+
}
31+
return true;
32+
}
33+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import java.util.*;
2+
3+
4+
public class TreeNode {
5+
int val;
6+
TreeNode left;
7+
TreeNode right;
8+
9+
TreeNode() {
10+
11+
}
12+
TreeNode(int val) {
13+
this.val = val;
14+
}
15+
16+
TreeNode(int val, TreeNode left, TreeNode right) {
17+
this.val = val;
18+
this.left = left;
19+
this.right = right;
20+
}
21+
}
22+
23+
class Solution {
24+
public boolean isValidBST(TreeNode root) {
25+
return validate(root, Long.MIN_VALUE, Long.MAX_VALUE);
26+
}
27+
28+
private boolean validate(TreeNode node, long min, long max) {
29+
if (node == null) {
30+
return true;
31+
}
32+
33+
if (node.val <= min || node.val >= max) {
34+
return false;
35+
}
36+
37+
return validate(node.left, min, node.val) && validate(node.right, node.val, max);
38+
}
39+
}

0 commit comments

Comments
 (0)