189. Rotate Array
·
Coding Test/LeetCode
난이도: 중간 (Medium)링크: LeetCode 189풀이 날짜: 2025/10/15 1. 문제 이해정수 배열 nums가 주어지고, 이를 오른쪽으로 k번 회전시킨 결과를 구하는 문제이다.Input: nums = [1,2,3,4,5,6,7], k = 3Output: [5,6,7,1,2,3,4]오른쪽으로 한 칸 회전할 때마다 마지막 원소가 맨 앞으로 이동한다. 2. 접근 아이디어이 문제는 직관적으로는 k번 반복해서 한 칸씩 이동시키면 되지만, 그 방법은 O(n * k)라서 비효율적이다.대신 배열의 부분 반전(reverse) 을 이용하면, 한 번에 O(n)으로 해결할 수 있다. 핵심 아이디어는 다음과 같다.전체 배열을 뒤집는다 → [1,2,3,4,5,6,7] → [7,6,5,4,3,2,1]앞쪽 k개의 부분..
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의 원래 데이터가 덮어씌워질 위험이 있다. 즉, 아직 비교가 끝나지 않은 값이 사라질 수 있다.따라서 뒤에서부터 큰 값을 채워넣는 방식이 훨씬 안전하고..