198. House Robber
·
Coding Test/LeetCode
난이도: 중간(Medium)Link: LeetCode 198풀이 날짜: 2025/10/13 1. 문제 이해여러 집이 일렬로 있을 때, 도둑이 인접한 두 집을 동시에 털 수 없다는 규칙 아래에서, 훔칠 수 있는 금액의 최댓값을 구하는 문제다.혼동하지 말아야 할 것은, 연속된 집은 털 수 없지만, 중간에 몇 집을 건너뛰어도 된다는 것이다. 2. 접근 아이디어 및 자료구조이 문제는 전형적인 1D DP 구조를 가지는데, 인접한 집을 털 수 없으므로i번째 집을 털었을 때의 최댓값 = i-2번째까지 턴 최댓값 + 현재 집 금액 이다.i번째 집을 털지 않을 경우 = i-1번째까지 턴 최댓값이 두가지 값을 비교하여 더 큰 값을 누적하는 방식으로 진행한다.이를 점화식으로 표현하면 아래와 같지만, dp[i] = max(d..
70. Climbing Stairs
·
Coding Test/LeetCode
난이도: 쉬움 (Easy)링크: LeetCode 70풀이 날짜: 2025.10.131. 문제 이해한 번에 1계단 또는 2계단을 오를 수 있을 때, n개의 계단을 오르는 서로 다른 방법의 총 수를 구하는 문제이다. 예를 들어,n = 2 → (1+1, 2) → 총 2가지n = 3 → (1+1+1, 1+2, 2+1) → 총 3가지즉, n번째 계단에 도달하는 방법은(n-1)번째에서 한 칸, 또는 (n-2)번째에서 두 칸 올라오는 경우의 합이다.한번더 풀어서 설명하면, n-1 번째까지 오르는 경우의 수 + n-2 번째까지 오는 경우의 수 를 합하면 n번째에 오르는 경우의 수인 것이다.점화식은 dp[i] = dp[i-1] + dp[i-2] 이다. 2. 접근 아이디어 및 자료구조이 문제는 1차원 DP(1Dimensi..
클로저 — 함수가 변수를 기억하는 방식
·
Frontend/Javascript Essentials
“A closure is the combination of a function and the lexical environment within which that function was declared.” 클로저란 함수와 그 함수가 선언된 렉시컬 환경의 조합이다. 자바스크립트에서 클로저는 단순히 “함수 안의 함수” 그 이상이다.클로저는 함수가 만들어질 당시의 스코프를 기억하는 메커니즘으로, 자바스크립트의 스코프와 실행 컨텍스트 구조를 이해하는 데 핵심적인 개념이다. 1. 렉시컬 스코프 (Lexical Scope)자바스크립트는 렉시컬 스코프(정적 스코프)를 따른다.즉, “함수가 어디서 호출되었는가”가 아니라 “어디서 정의되었는가”에 따라 상위 스코프가 결정된다.const x = 1;function foo(..
프로토타입 기반 상속
·
Frontend/Javascript Essentials
자바스크립트는 다른 언어(C++, Java 등)의 클래스 기반 상속(class-based inheritance)과 달리,프로토타입 기반 상속(prototype-based inheritance)을 사용한다.이는 객체가 다른 객체를 직접 상속받아 동작하는 방식으로, 자바스크립트의 유연한 객체 지향 특성을 잘 보여준다. 1. 프로토타입 기반 상속이란?모든 객체는 내부적으로 *[[Prototype]](또는 **__proto__)이라는 숨겨진 참조를 가진다.이 참조를 통해 상위 객체(프로토타입 객체)의 속성과 메서드를 공유받는다. 즉, 객체 간 직접적인 상속 관계가 형성되는 것이다. ES6의 class와 extends 문법은 이러한 프로토타입 상속을 문법적으로 단순화한 표현(syntactic sugar)이다. *..
이벤트 루프
·
Frontend/Javascript Essentials
1. 이벤트 루프이벤트 루프(브라우저에 내장되어 있는 기능)는 자바스크립트의 비동기 처리 메커니즘을 관리하는 핵심 엔진으로,실행 컨텍스트가 담긴 콜 스택(Call Stack) 과, 나중에 실행될 (매크로) 태스크 큐(task Queue) 및 마이크로태스크 큐(Microtask Queue) 를 조율하는 역할을 한다. 자바스크립트는 단일 스레드 언어이기 때문에, 한 번에 하나의 작업만 수행할 수 있는데, 실행할 함수가 생기면 콜 스택에 쌓이고, 스택의 맨 위에 있는 함수부터 순차적으로 실행되는 것이다. 이때 비동기 작업(예: setTimeout, fetch)은 바로 실행되지 않고, 백그라운드에서 완료된 후 해당 콜백이 큐(매크로 또는 마이크로 태스크큐)에 등록된다. 이벤트 루프는 콜 스택이 비어 있는지 계속..
103. Binary Tree Zigzag Level Order Traversal
·
Coding Test/LeetCode
난이도: 중간 (Medium)링크: LeetCode 103풀이 날짜: 2025.10.10(다시품)1. 문제 이해 이진 트리의 각 레벨(level)을 좌 → 우, 우 → 좌 순서로 번갈아가며 순회한 결과를 2차원 배열로 반환하는 문제.2. 접근 아이디어 및 자료구조이 문제는 BFS (너비 우선 탐색) 으로 해결할 수 있는데,각 레벨을 queue에 넣고 한 레벨씩 탐색하며,방향을 나타내는 direction 변수를 사용해 순서를 제어하면 된다.direction = 1 → 왼쪽 → 오른쪽direction = -1 → 오른쪽 → 왼쪽한 레벨이 끝날 때마다 direction *= -1로 방향을 반전시키는 것이 포인트.3. 잘못된 접근 (초기 시도)var zigzagLevelOrder = function(root) ..