LeetCode 239. 슬라이딩 윈도우 최대값
239. 슬라이딩 윈도우 최대값
문제 설명
정수 배열 nums가 주어졌을 때, 크기 k의 슬라이딩 윈도우가 배열의 가장 왼쪽에서 가장 오른쪽으로 이동합니다. 윈도우 내의 k개의 숫자만 볼 수 있습니다. 윈도우는 매번 오른쪽으로 한 칸씩 움직입니다.
윈도우 내의 최대값을 반환하세요.
예제 1:
<strong>입력:</strong> nums = [1,3,-1,-3,5,3,6,7], k = 3
<st ...
7월 16일 17:35에 게시됨
LeetCode 동적 계획법 문제 해결 전략
동적 계획법 핵심 개념
동적 계획법은 중복 하위 문제가 많은 최적화 문제에 효과적입니다. 문제를 하위 문제로 분해하고, 동일 계산을 반복하지 않도록 결과를 저장합니다. 최적 부분 구조가 존재해야 적용 가능하며, 이는 지역 최적해가 전역 최적해로 이어지는 구조를 의미합니다. 핵심은 상위 문제 해결에 하위 문제의 결과가 재사용되는 점입니다.
대표적인 예로 피 ...
7월 9일 21:30에 게시됨
LeetCode 문제 풀이: 31번부터 60번까지
다음 순열
정수 배열의 순열은 모든 요소를 일렬로 나열한 것을 의미합니다. 주어진 정수 배열에서 사전순으로 다음에 오는 더 큰 순열을 찾아야 합니다. 만약 더 큰 순열이 없다면, 배열을 가장 작은 순서로 재배치해야 합니다.
#include <vector>
#include <algorithm>
class Solution {
public:
void nextPermutation(std::vector<int>& n ...
7월 8일 05:51에 게시됨
LeetCode 알고리즘 문제 분석: 이분 탐색을 이용한 최적해 도출 기법
문제 1: 일별 최대 작업 시간 최소화 (LCP 12)
특정 프로젝트 진행 시 전체 작업량을 $N$개의 과제들로 나누어 $M$일 동안 처리해야 하는 상황을 가정합니다. 각 과제에는 고유한 수행 시간이 존재하며, 반드시 순서대로 실행되어야 합니다. 다만, 매일 한 번씩 전문가의 도움을 받아 특정 과제의 소요 시간을 제로로 할 수 있는 기회가 주어집니다. 이 조건 하에서 $M$일 ...
7월 7일 04:35에 게시됨
리트코드 78: 재귀와 백트래킹을 활용한 부분 집합 문제 풀이
부분 집합(Subsets) 문제는 주어진 정수 배열의 모든 가능한 조합(멱집합, Power Set)을 찾는 알고리즘 문제입니다. 재귀적 사고를 통해 문제를 작은 단위로 분해하고, 결정 트리(Decision Tree)를 구축하여 해결하는 과정은 백트래킹의 기초를 다지는 데 매우 효과적입니다.
1. 문제 핵심 이해하기
리트코드 78번 문제는 정수로 이루어진 배열 nums가 주어졌을 때, 해당 ...
7월 6일 17:54에 게시됨
스택과 재귀: 385, 341, 394 문제 해결
385. 미니 구문 분석기 (중간)
문자열 s가 정수 중첩 리스트를 나타낸다고 가정할 때, 이를 구문 분석하는 파서를 구현하고 파싱 결과인 NestedInteger를 반환하세요.
리스트의 각 요소는 정수 또는 정수 중첩 리스트일 수 있습니다.
예제 1:
<strong>입력:</strong> s = "324",
<strong>출력:</strong> 324
<strong>설명:</s ...
7월 2일 04:22에 게시됨
큐를 사용하여 스택 구현: LeetCode 225 풀이
문제 정의
두 개의 큐를 활용하여 후입선출(LIFO) 방식의 스택을 구현해야 합니다. push, top, pop, empty 네 가지 기본 연산을 지원해야 하며, 큐의 기본 기능인 push to back, peek/pop from front, size 및 is empty만 사용할 수 있습니다.
해결 방법 1: 단일 큐 사용
스택의 마지막 요소를 큐의 맨 앞에서 제거해야 하는 점이 어려움입니다. 이는 큐의 끝 요소를 제 ...
6월 27일 17:07에 게시됨
C# 해시 테이블을 활용한 알고리즘 문제 해결 및 최적화 기법
242. 유효한 애너그램 (Valid Anagram)
두 문자열이 서로 애너그램 관계인지 확인하는 문제입니다. 애너그램이란 문자의 순서만 다르고 구성 문자와 그 개수가 동일한 경우를 의미합니다.
최적화된 구현
문자열의 길이가 다르면 애너그램이 될 수 없으므로 조기 반환(Early Return)을 적용합니다. 또한, 소문자 알파벳으로만 구성된다는 제약 조건이 있으므로 해시 테이블 ...
6월 20일 05:26에 게시됨
연결 리스트 알고리즘 문제 풀이
연결 리스트 요소 제거
문제 설명:
주어진 연결 리스트에서 특정 값을 가진 모든 노드를 제거하는 문제이다.
解题 전략:
노드를 삭제할 때 현재 노드의 next 포인터를 다음 노드의 next로 변경하면 된다. C++을 사용하므로 메모리 해제도 반드시 처리해야 한다. 더미 노드를 사용하면 헤드 노드의特殊性한 경우를 처리할 필요가 없어져 코드가 간단해진다.
구현 코드:
...
6월 17일 19:49에 게시됨
LeetCode 2270: 누적합을 활용한 배열 분할 조건 탐색
문제 이해LeetCode 2270번 Split Array Largest Sum과 유사한 조건으로, 배열을 두 부분으로 나누었을 때 왼쪽 구간의 합이 오른쪽 구간의 합 이상이 되는 분할 지점의 개수를 구하는 문제입니다.길이가 n인 배열 nums에서 인덱스 i (0 ≤ i < n-1)를 기준으로 분할할 때, 다음 조건을 만족하면 유효한 분할입니다:sum(nums[0..i]) ≥ sum(nums[i+1..n-1])핵심 관찰전체 ...
6월 6일 21:21에 게시됨