2024/07 65

[BinarySearch][Medium] 74. Search a 2D Matrix

https://leetcode.com/problems/search-a-2d-matrix/description/ 주어진 숫자 2D Matrix에서 대상 target이 존재하는지 여부를 반환하라. 2가지 방법으로 풀수 있다. 우선 1열의 값들로 대상값을 비교해 찾거나 아니면 target이 이전 열보다 크고 현재보다 작은지 찾는다.그러면 대상 행이 나오고 이 행에서 역시 같은 방법으로 binary search를 한다.  아니면, 전체 matrix를 1차원 index로 변환해서 한번에 binary search를 해도 된다.  두번째 방법이 더 심플해 보여 코드를 만든다. 코드 더보기bool searchMatrixBS(vector>& matrix, int left, int right, int target){ ..

Leetcode/NeetCode 2024.07.12

[BinarySearch][Easy] 704. Binary Search

https://leetcode.com/problems/binary-search/description/  기본적인 binary search 문제. TC log(N)기반의 타 문제 풀이들의 근간이 되므로, 잘 숙지 해 둘 것. int searchBS(vector& nums, int left, int right, int target) { if(left > right) return -1; int mid = left + (right-left) / 2; if(nums[mid] == target) return mid; else if(nums[mid] & nums, int target) { return searchBS(nums, 0, nums.size()-1, tar..

Leetcode/NeetCode 2024.07.11

[stack][Medium] 739. Daily Temperatures

https://leetcode.com/problems/daily-temperatures/description/ 정수배열이 주어지고, 이 배열이 각 날짜의 온도를 의미한다.각 날짜에서 더 따뜻해지는 날까지의 차수를 반환하라. 좋은 문제다.  코드로 가기 전에 반드시 수기로 로직을 확인할 필요가 있겠다. stack 데이터로 온도와 index데이터를 가진다. 현재 온도가 stack데이터 보다 높다면, 바로 계산하고 stack에 저장된 index에 이 차이를 쓴다.낮다면, stack에 계속 저장한다. 이게 다다.  stack에 최소값을 순차적으로 넣고 특정 조건에 pop하면 이전 조건들을 그대로 이용할 수 있음을 활용한다. 코드 더보기vector dailyTemperatures(vector& temp) { ..

Leetcode/NeetCode 2024.07.11

[stack][Medium] 22. Generate Parentheses

https://leetcode.com/problems/generate-parentheses/description/ n의 개수에 해당하는 유효한 괄호 구조를 만들라. 특정 조건에 따라 더해 나갈 수 있는 조건을 제한하며 특정 길이까지 수행한다. stack 보다는 backtrack에 가깝다.  진행 : '(' 를 더하거나 ')' 를 더할 수 있다.조건 : 1. open의 수가 n 보다 작으면 '('를 더할 수 있다.  2. open수가 close수보다 많을 때만, ')'를 더할 수 있다.  완료 : string 길이가 nx2가 되면 완료 된다.  코드 더보기void BuildParenthesis(vector& vBuff, string cur, int open, int close, int n){ if (..

Leetcode/NeetCode 2024.07.11

[stack][Medium] 155. Min Stack

https://leetcode.com/problems/min-stack/description/ Min stack을 구현하라. 모든 stack function은 O(1)에 작동하여야 한다.  두개의 stack을 사용한다. 하나는 기본 stack의 용도로, 다음 stack은 최소값 buffer로 사용한다.  stack의 본질은 어떤 특정 data를 넣은 역순으로 꺼내는 것이다. 최소값 stack에 (input 당시에) 최소값을 넣으면 꺼낼 때도 역시 보장되는 것이다.그냥 변수 하나를 써서 최소값을 기억해 놓는다고 생각해 보자. 하나에 대해서는 잘 작동할 것이나, 이것을 반환한 이후에 그 이전 최소값 정보가 필요하게 되고, 이것의 기능을 하는 것 또한 stack이 적당한 것이다.  코드 더보기class Min..

Leetcode/NeetCode 2024.07.11

[SlidingWindow][Medium] 567. Permutation in String

https://leetcode.com/problems/permutation-in-string/description/ 두개의 문장 s1과 s2가 주어질 때, s1의 permutation이 s2에 포함되어 있는지 여부를 반환하라.  문제자체는 간단하다. 다면 겹치는 경우에 대한 고려를 해야 한다.  따라서 유효하지 않는 경우, 즉 s1의 문자가 s2에 존재하지 않게 되면존재하도록 left를 당기도록 만들고 s1의 문자를 제거한다.  모두 제거되면 s1에 대한 permutation이 있다고 판단할 수 있다. 코드 더보기bool checkInclusion(string s1, string s2) { map mapFreq; for (int k = 0; k   결과

Leetcode/NeetCode 2024.07.10

[SlidingWindow][Medium] 424. Longest Repeating Character Replacement

https://leetcode.com/problems/longest-repeating-character-replacement/description/ 대문자로 이루어진 문자열을 입력받을 때, k 만큼 이 문자를 다른 문자고 고칠 수 있다. 이때 구할 수 있는 최대 길이의 sub string의 길이를 찾아라.  생각보다 복잡한 문제.  우선 특정 구간이 있으면 구간내의 특정 문자의 최대 수가(구간 길이 - 최대문자수 >= k) 이어야만 유효한 구간 이라는 것이다. 따라서 이것을 이용 한다.  최대문자수는 각 단어의 수를 집계하고 그것들의 정렬을 사용한다. 구간 길이는 right - left + 1 이다.  이때 만족하지 않으면 다시 만족할때 까지 left를 당긴다. left 에 해당한 문자수를 줄인다.이것이..

Leetcode/NeetCode 2024.07.10