Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions climbing-stairs/jaejeong1.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
class SolutionClimbStairs {

public int climbStairs(int n) {
// n번째 계단까지 오르는 방법의 수
// 첫 번째 계단까지 오르는 방법은 1가지
// 두 번째 계단까지 오르는 방법은 2가지
// 세 번째 계단부터는 이전 두 계단의 방법을 더하여 계산
// stairs[i]는 i번째 계단까지 오르는 방법의 수
// 시간복잡도: O(N), 공간복잡도: O(N)
if (n == 1) {
return 1;
}

if (n == 2) {
return 2;
}

int[] stairs = new int[n+1];
stairs[1] = 1;
stairs[2] = 2;


for (int i=3; i<=n; i++) {
stairs[i] = stairs[i-1] + stairs[i-2];
}

return stairs[n];
}
}
34 changes: 34 additions & 0 deletions product-of-array-except-self/jaejeong1.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
class SolutionProductExceptSelf {

public int[] productExceptSelf(int[] nums) {
// answer[i] = nums[0] * nums[1] * ... * nums[i-1] * nums[i+1] * ... * nums[n-1]
// answer[i] = left[i] * right[i]
// left[i] = nums[0] * nums[1] * ... * nums[i-1]
// right[i] = nums[i+1] * ... * nums[n-1]
// left[i] = left[i-1] * nums[i-1]
// right[i] = right[i+1] * nums[i+1]
// answer[i] = left[i] * right[i]
// 시간복잡도: O(N), 공간복잡도: O(N)
int n = nums.length;
int[] left = new int[n];
int[] right = new int[n];
int[] answer = new int[n];

left[0] = 1;
right[n - 1] = 1;

for (int i = 1; i < n; i++) {
left[i] = left[i - 1] * nums[i - 1];
}

for (int i = n - 2; i >= 0; i--) {
right[i] = right[i + 1] * nums[i + 1];
}

for (int i = 0; i < n; i++) {
answer[i] = left[i] * right[i];
}

return answer;
}
}
36 changes: 36 additions & 0 deletions two-sum/jaejeong1.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

class SolutionTwoSum {
public int[] twoSum(int[] nums, int target) {
// 모든 수를 해시맵에 저장한다. key = nums[i], value = i
// 해시맵을 순회하며 target - key = result를 만족하는 쌍을 찾음
// key 와 result 의 value를 정답으로 반환한다
// 시간복잡도: O(N), 공간복잡도: O(N)
// 값별 인덱스 리스트를 저장할 해시맵
HashMap<Integer, List<Integer>> indicesByValue = new HashMap<>();

for (int i = 0; i < nums.length; i++) {
indicesByValue.computeIfAbsent(nums[i], k -> new ArrayList<>()).add(i);
}

for (int key : indicesByValue.keySet()) {
int diff = target - key;

if (indicesByValue.containsKey(diff)) {
int index1 = indicesByValue.get(key).get(0);

// 동일한 값에 대해 두 개의 다른 인덱스가 있는지 확인
int index2 = (key == diff && indicesByValue.get(key).size() > 1)
? indicesByValue.get(key).get(1)
: indicesByValue.get(diff).get(0);

return new int[]{index1, index2};
}
}

// 쌍을 찾지 못한 경우
return null;
}
}