125. Valid Palindrome
·
Coding Test/LeetCode
난이도: 중간 (Medium)링크: LeetCode 125풀이 날짜: 2025/10/22 1. 문제 이해문자열에서 알파벳과 숫자만 고려하고, 대소문자 구분 없이 회문(Palindrome. 뒤집었을때 원문과 동일한지) 여부를 판단하는 문제. 2. 풀이 방법 비교방법 1 — 전체 전처리 후 뒤집기var isPalindrome = function(s) { const string = s.replace(/[^0-9a-zA-Z]/g, '').toLowerCase(); const reverse = string.split('').reverse().join('') return string === reverse};정규식을 이용해 알파벳/숫자만 남김모두 소문자로 변환 후 뒤집기마지막에 문자열 비교장점: 코드 간결,..
20. Valid Parentheses
·
Coding Test/LeetCode
난이도: 쉬움 (Easy)링크: LeetCode 20 — Valid Parentheses풀이 날짜: 2025/10/22 1. 문제 이해입력:s = "()[]{}"출력:true괄호로 구성된 문자열이 주어질 때, 올바르게 짝이 맞는지 판단하는 문제다. 모든 열린 괄호는 같은 종류의 닫힌 괄호로 닫혀야 하며, 올바른 순서로 닫혀야 한다.입력결과이유"()"true괄호 짝이 맞음"()[]{}"true여러 종류의 괄호가 올바르게 닫힘"(]"false서로 다른 괄호가 짝지어짐"([)]"false괄호 순서가 잘못됨"{[]}"true중첩 구조로도 올바르게 닫힘 2. 접근 방식 — Stack (스택)이 문제는 스택 자료구조의 대표적인 응용 문제다. 핵심 아이디어:열린 괄호는 스택에 push한다.닫힌 괄호가 등장하면, 스택..
128. Longest Consecutive Sequence
·
Coding Test/LeetCode
난이도: 중간 (Medium)링크: LeetCode 128풀이 날짜: 2025/10/22 1. 문제 이해정수 배열 nums가 주어질 때, 연속된 정수로 이루어진 가장 긴 시퀀스 길이를 구하는 문제이다. 그리고 연속된 수들은 배열 내에서 순서대로 나열되어 있을 필요는 없다. 핵심은 연속된 수들을 효율적으로 찾는 방법이다. 2. 접근 방식 — HashSet 활용단순히 배열을 정렬한 후 연속 시퀀스를 찾으면 O(n log n) 시간(sort 정렬)이 걸리는데, 하지만 HashSet을 사용하면 O(n) 시간에 해결 가능하다. 핵심 아이디어모든 수를 HashSet에 저장한다.각 수가 연속 시퀀스의 시작점인지 확인한다. 즉, 시작점 조건은 num - 1이 Set에 없는 경우.시작점이면, while 문을 이용하여,..
49. Group Anagrams
·
Coding Test/LeetCode
난이도: 중간 (Medium)링크: LeetCode 49풀이 날짜: 2025/10/21 1. 문제 이해입력:strs = ["eat","tea","tan","ate","nat","bat"]출력:[["eat","tea","ate"],["tan","nat"],["bat"]] 문자 순서를 재배열해서 동일한 단어가 될 수 있는 문자열들을 하나의 그룹으로 묶는다. 즉, Anagram(아나그램) 들을 함께 모으는 문제다. 2. 접근 방식 — 정렬된 문자열(Key) 기반 해싱두 문자열이 아나그램인지 확인하는 가장 간단한 방법은 다음과 같다: 문자열의 문자를 정렬했을 때 동일한 결과를 갖는지 비교한다. 예를 들어 "eat", "tea", "ate" → 모두 정렬 시 "aet""tan", "nat" → 모두 정렬 시 "a..
57. Insert Interval
·
Coding Test/LeetCode
난이도: 중간 (Medium)링크: LeetCode 57풀이 날짜: 2025/10/21 1. 문제 이해이미 정렬된 구간 배열 intervals가 주어지고, 새로운 구간 newInterval을 삽입하면서 겹치는 구간은 병합하여 최종 배열을 반환하는 문제이다. 2. 접근 방식 — 단계별 처리핵심 아이디어: 세 구간으로 나누어 처리newInterval보다 앞쪽에 겹치지 않는 구간 → 그대로 결과에 pushnewInterval과 겹치는 구간 → 시작값은 min, 끝값은 max로 병합newInterval 이후 뒤쪽 구간 → 그대로 결과에 push이렇게 하면 한 번의 순회로 모든 조건을 처리가 가능하다. 3. 풀이 코드/** * @param {number[][]} intervals * @param {number[..
56. Merge Intervals
·
Coding Test/LeetCode
난이도: 중간 (Medium)링크: LeetCode 56풀이 날짜: 2025/10/21 1. 문제 이해여러 구간(interval)이 주어졌을 때, 겹치는 구간을 병합하고, 겹치지 않는 구간은 그대로 유지한다. 2. 접근 방식 — 정렬 + 병합핵심 아이디어: 시작값 기준으로 정렬 후, 연속되는 구간을 병합한다.intervals를 시작값 기준으로 오름차순 정렬current 변수에 현재 병합 중인 구간 저장반복문으로 각 구간과 current 비교:겹치는 경우(current[1] >= intervals[i][0]): current[1] = max(current[1], end) → 끝값 갱신겹치지 않는 경우(current[1] current를 결과 배열에 push, current 갱신 3. 풀이 코드/** * @..