Skip to content

[WEEK02] 추슬기#6

Merged
doitchuu merged 4 commits intomainfrom
doitchuu
Feb 21, 2026
Merged

[WEEK02] 추슬기#6
doitchuu merged 4 commits intomainfrom
doitchuu

Conversation

@doitchuu
Copy link
Member

@doitchuu doitchuu commented Feb 19, 2026

1. Invert Binary Tree

  • 문제를 풀었어요.
  • 풀이 시간 : 24분

1) 복잡도 계산

  • 시간 복잡도: O(n)
    모든 노드를 한 번씩 방문하면서 left/right를 swap 한다.

2) 접근 아이디어

이 문제는 각 노드마다 왼쪽과 오른쪽 자식을 서로 바꾸고,
그 자식들에 대해서도 같은 작업을 반복하면 된다.

  1. 노드가 null이면 그대로 반환
  2. 현재 노드의 leftright를 swap
  3. left 서브트리에 대해 재귀 호출
  4. right 서브트리에 대해 재귀 호출

3) 회고

  • 다음에는 BFS(큐) 방식으로도 구현해보면 좋을 것 같다.


2. Valid Anagram

  • 문제를 풀었어요.
  • 풀이 시간 : 14분

1) 복잡도 계산

  • 시간 복잡도: O(n)
    문자열을 한 번 순회하며 카운트 후 비교한다.
  • 공간 복잡도: O(k)
    k는 등장한 문자 종류 수

2) 접근 아이디어

애너그램은 두 문자열의 각 문자 개수가 완전히 같으면 된다.

내 풀이 흐름:

  1. 길이가 다르면 바로 false
  2. sMap, tMap 각각 문자 개수 카운트
  3. sMap을 돌면서 tMap에 동일한 key/value가 있는지 확인
  4. 모두 일치하면 true

3) 회고

  • Map을 2개 쓰는 방식은 직관적이지만 약간 과한 느낌이었다.
  • counter 하나만 만들어서
    • s는 +1
    • t는 -1
      하면서 바로 검증하는 방식이 더 깔끔하다.
  • 다음에는 “한 자료구조로 누적/차감”하는 접근을 먼저 떠올려보자.

변수 하나로 충분한 다른 사람 예시도 있었다.

var isAnagram = function(s, t) {
    if (s.length !== t.length) {
        return false;
    }

    const counter = new Map();

    for (let char of s) {
        counter.set(char, (counter.get(char) || 0) + 1);
    }

    for (let char of t) {
        if (!counter.has(char) || counter.get(char) === 0) {
            return false;
        }
        counter.set(char, counter.get(char) - 1);
    }

    return true;    
};


3. Binary Search

  • 문제를 풀었어요.
  • 풀이 시간 : 1분 ~ 20분

1) 복잡도 계산

(indexOf 사용)

  • 시간 복잡도: O(n)
  • 공간 복잡도: O(1)

(이진 탐색 구현)

  • 시간 복잡도: O(log n)
  • 공간 복잡도: O(1)

2) 접근 아이디어

정렬된 배열이라는 점이 핵심이다.
탐색 범위를 절반씩 줄이는 이진 탐색을 사용했다.

흐름:

  1. start = 0, end = nums.length - 1
  2. start <= end 동안 반복
  3. mid = floor((start + end) / 2)
  4. 값이 같으면 return
  5. 더 크면 왼쪽 범위로
  6. 더 작으면 오른쪽 범위로

범위를 계속 줄이다가 못 찾으면 -1 반환.


3) 회고

  • 처음엔 indexOf로 풀 수 있었지만, 문제 의도는 이진 탐색 구현이었다.
  • 정렬된 배열이라는 힌트를 더 빨리 캐치해야 한다.
  • 이진 탐색은 start <= end 조건과 mid 업데이트가 핵심 패턴이다.


4. Flood Fill

  • 문제를 풀었어요.
  • 풀이 시간 : 50분

1) 복잡도 계산

  • 시간 복잡도: O(R * C)
    -> 최악의 경우 이미지 다 돌 수 있다고 한다.

2) 접근 아이디어

시작점에서 상하좌우 4방향으로 퍼져나가며
기존 색(original)과 같은 영역만 변경했다.
정답을 보고 다시 풀었다.


3) 회고

  • dx/dy 배열로 방향을 관리하니 코드가 깔끔해졌다.
  • original === color 예외 처리가 없으면 무한 루프가 발생할 수 있다는 점이 중요하다.
  • DFS(재귀) 방식으로도 구현해보면 비교 학습이 될 것 같다.

Copy link
Collaborator

@sik9252 sik9252 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이번 문제들 너무 잘 푸셔서 저의 지식으로는 조언드릴 부분이 하나밖에 떠오르지 않았습니다 최고 👍


const sMap = new Map();
const tMap = new Map();

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Map을 1개만 두고 +1, -1하면서 연산하면 코드량 감소, 메모리 절약 효과도 있을 것 같아요!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

지현님 풀이도 좋군요! 피드백 감사합니다

Copy link
Collaborator

@raejun92 raejun92 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ValidAnagram 말고는 풀이가 다 너무 깔끔합니다!

@doitchuu doitchuu merged commit 8bc209d into main Feb 21, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants