121. Best Time to Buy and Sell Stock
·
Coding Test/LeetCode
난이도: 쉬움 (Easy)링크: LeetCode 121풀이 날짜: 2025/10/15 1. 문제 이해주식 가격 배열 prices가 주어질 때, 한 번의 매수와 매도로 얻을 수 있는 최대 이익을 구하는 문제이다.매수는 반드시 매도보다 먼저 해야 함.매도는 한 번만 가능. 2. 접근 아이디어한 번의 거래로 최대 수익을 내야 하므로, 최소 가격을 추적 - 현재까지 본 가격 중 가장 작은 값을 기록 → minPrice현재 가격으로 가능한 최대 이익 계산 - prices[i] - minPrice → 지금 팔면 얻을 수 있는 최대 이익최대 이익 갱신 - maxProfit = Math.max(maxProfit, prices[i] - minPrice)최소 가격 갱신 - minPrice = Math.min(minPri..
169.Majority Element
·
Coding Test/LeetCode
난이도: Easy링크: LeetCode 169풀이 날짜: 2025/10/15 1. 문제 이해주어진 배열 nums에서 과반수 이상(배열 길이의 절반 이상) 등장하는 숫자를 찾는 문제다.반드시 과반수 이상 존재한다고 가정하기 때문에, 한 값이 전체 배열의 절반 이상을 차지한다.예) [3,2,3] → 3예) [2,2,1,1,1,2,2] → 2 2. 접근 아이디어이 문제의 효율적인 풀이로 Boyer-Moore Voting Algorithm을 사용할 수 있다. Boyer-Moore Voting Algorithm이 알고리즘은 배열을 한 번만 순회하면서 과반수 요소를 찾는 방법이다.후보값과 count를 관리major라는 후보값을 하나 두고, 얼마나 지지받는지 count로 센다고 생각한다.count가 0이면 후보값이 ..
26.Remove Duplicates from Sorted Array
·
Coding Test/LeetCode
난이도: Easy링크: LeetCode 26풀이 날짜: 2025/10/15 1. 문제 이해정렬된 배열 nums가 주어질 때, 중복된 요소를 제거하고 고유한 요소만 남긴 후, 그 길이를 반환해야 한다.단, 새로운 배열을 만들면 안 되고, 주어진 배열 nums를 직접 수정(in-place)해야 한다.즉, 문제의 핵심은 배열을 정리(clean up)하면서 중복을 제거하는 효율적인 방법을 찾는 것이다. 2. 아이디어: Two Pointers두 개의 포인터를 사용해 배열을 한 번 순회하며, 중복되지 않은 값만 앞으로 모으는 방식이다.포인터역할i배열을 순회하면서 현재 원소 확인current유일한 요소를 저장할 다음 위치배열이 정렬되어 있으므로, 인접한 두 원소가 다르면 새로운 고유 값이 등장한 것이다. 3. 풀이 ..
27.Remove Element
·
Coding Test/LeetCode
난이도: Easy링크: LeetCode 27풀이 날짜: 2025/10/14 1. 문제 이해배열 nums와 값 val이 주어졌을 때, nums 내에서 val을 모두 제거한 후의 길이를 반환하는 문제다.단, 추가적인 배열을 사용하지 말고 (in-place), 제거 후에도 나머지 원소들의 상대적 순서는 유지되어야 한다. 2. 아이디어: Two Pointers배열을 한 번 순회할 포인터와 val가 아닌 값들만 앞으로 옮기기 위한 포인터 2개를 사용한다.포인터역할num순회용 포인터 (for문으로 배열을 순회)currentval이 아닌 값이 들어갈 위치를 가리킴 3. 코드 분석var removeElement = function(nums, val) { let current = 0; for (let num of ..
88.Merge Sorted Array
·
Coding Test/LeetCode
난이도: Easy링크: LeetCode 88풀이 날짜: 2025/10/14 1. 문제 이해두 개의 정렬된 배열 nums1과 nums2가 주어지는데, 여기서 nums1은 두 배열의 모든 원소를 담을 수 있도록 뒤쪽에 여유 공간이 있다. 이 조건에서 nums2의 원소를 모두 nums1 안에 병합하여 오름차순 정렬된 하나의 배열을 완성하는 것이 목표이다.단, 추가적인 배열을 만들지 않고 in-place(제자리) 에서 해결해야 한다. 2. 접근 방법처음엔 이렇게 생각할 수도 있다. “앞에서부터 작은 값부터 비교하며 채워넣으면 되겠네?”하지만 그렇게 하면 nums1의 원래 데이터가 덮어씌워질 위험이 있다. 즉, 아직 비교가 끝나지 않은 값이 사라질 수 있다.따라서 뒤에서부터 큰 값을 채워넣는 방식이 훨씬 안전하고..
이벤트 버블링과 캡처링 완전 이해하기
·
Frontend/Javascript Essentials
브라우저에서 이벤트는 단순히 한 요소에서만 끝나지 않는다.사용자가 어떤 버튼을 클릭하면, 그 클릭 이벤트는 DOM 트리 전체를 따라 전파(propagation) 되며 여러 단계의 흐름을 거친다.이벤트 전파는 크게 두 가지 흐름으로 나뉜다 — 버블링(Bubbling) 과 캡처링(Capturing).1. 버블링 (Bubbling)이벤트 버블링은 가장 안쪽의 요소에서 시작해 바깥쪽 부모 요소로 전파되는 현상이다.즉, 특정 요소에 이벤트가 발생하면 해당 요소의 핸들러가 실행된 후,그 이벤트는 부모 → 조상 순으로 계속 전파되며 각각의 핸들러가 차례로 실행된다. 이때 이벤트가 시작된 가장 안쪽의 요소를 타깃(target) 이라 하며, event.target으로 접근할 수 있다. FORM DIV P..