Skip to content

Commit

Permalink
시간, 공간 복잡도 분석 주석 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
eunhwa99 committed Dec 20, 2024
1 parent 7728ffa commit ce1b784
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 8 deletions.
9 changes: 8 additions & 1 deletion 3sum/eunhwa99.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
import java.util.Arrays;
import java.util.List;

/**
* 문제 풀이
*/
// -4 -1 -1 0 2 2
// p1 p2 p3 sum < 0 -> p2 앞으로
// p1 p2 p3 sum < 0 -> p2 앞으로
Expand All @@ -11,7 +14,11 @@
// p1 p2 p3 sum < 0 -> p2 앞으로 인데, p2 > p3 되므로 p1 앞으로
// p1 p2 p3 sum = 0 반복

// 순회 횟수: n + (n-1) + (n-2) + .. => O(N^2)
/**
* 시간/공간 복잡도
*/
// 시간 복잡도 - 순회 횟수: n + (n-1) + (n-2) + .. => O(N^2)
// 공간 복잡도 - 배열을 정렬하는 데 O(n log n)의 공간 + 결과를 저장하는 answer 리스트는 문제의 요구에 따라 O(k)의 공간 = O(n log n) (배열 정렬을 위한 공간) + O(k) (결과 저장 공간)

class Solution {
public List<List<Integer>> threeSum(int[] nums) {
Expand Down
10 changes: 9 additions & 1 deletion climbing-stairs/eunhwa99.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,23 @@
/**
* 문제 풀이
*/
// n=2 (1,1), (2) -> 2 가지
// n=3 (n=2, 1), (n=1, 2) -> 2 + 1 = 3가지
// n=4 (n=3, 1), (n=2, 2) -> 3 + 2 = 5가지
// n=5 (n=4, 1) , (n=3, 2)
// n=k (n=k-1, 1), (n=k-2, 2)

/**
* 시간/공간 복잡도
*/
// 시간 복잡도: 각 칸을 한 번씩 방문 -> O(n)
// 공간 복잡도: DP 배열 크기 -> O(n)
class Solution {
public int climbStairs(int n) {
int[] cntArray = new int[n + 1];
cntArray[0] = 1;
cntArray[1] = 1;
for (int i = 2; i <= n; ++i) { // 시간 복잡도: O(n)
for (int i = 2; i <= n; ++i) {
cntArray[i] = cntArray[i - 1] + cntArray[i - 2];
}
return cntArray[n];
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// 시간 복잡도: 트리의 모든 노드를 한 번씩만 방문 -> O(n)
// 공간 복잡도: 재귀적으로 트리를 구성 ->
// 트리가 균형 잡힌 경우(즉, 트리의 높이가 log(n)인 경우), 재귀 호출 스택의 깊이는 O(log n)
// 트리가 편향된 형태(예: 모두 왼쪽 자식만 존재하는 경우)라면, 재귀 깊이는 O(n)

class TreeNode {
int val;
Expand Down Expand Up @@ -29,7 +33,7 @@ public TreeNode buildTree(int[] preorder, int[] inorder) {
return build(preorder, inorder, 0, inorder.length - 1);
}

// O(n)

private TreeNode build(int[] preorder, int[] inorder, int inStart, int inEnd) {
// 재귀 종료 조건
// 포인터(인덱스)가 배열 길이를 넘었을
Expand Down
15 changes: 10 additions & 5 deletions decode-ways/eunhwa99.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
import java.util.Arrays;

/**
* 문제 풀이
* 예제) 11106
* 가장 큰 수는 2자리 이므로 한 번에 갈 수 있는 칸은 1~2칸
* 현재 칸이 0일 경우는 칸 이동 불가
* 코드 범위는 1~26
*/

class Solution {
//시간 복잡도: 문자열의 각 인덱스를 한 번씩만 처리하므로 전체 O(n)
//공간 복잡도: dp 배열은 문자열의 길이에 비례하여 O(n) 공간을 차지

// 11106
// 가장 큰 수는 2자리 이므로 한 번에 갈 수 있는 칸은 1~2칸
// 현재 칸이 0일 경우는 칸 이동 불가
// 코드 범위는 1~26
class Solution {

int stringSize = 0;
int[] dp;
Expand Down
5 changes: 5 additions & 0 deletions valid-anagram/eunhwa99.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
import java.util.HashMap;
import java.util.Map;

/**
* 시간/공간 복잡도
*/
// 시간 복잡도: 문자열을 한 번씩만 방문 -> O(n)
// 공간 복잡도: 문자열 길이만큼 공간 필요(hashmap 크기) -> O(n)
class Solution {
public boolean isAnagram(String s, String t) {

Expand Down

0 comments on commit ce1b784

Please sign in to comment.