분류 전체보기 422

[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

[SlidingWindow][Medium] 3. Longest Substring Without Repeating Characters

https://leetcode.com/problems/longest-substring-without-repeating-characters/description/ 문자열이 주어질 때, char의 중복이 없는 가장 긴 sub string의 길이를 구하라.  전형적인 sliding window 문제. 중복이 생기면 중복이 제거될 때까지 right를 당긴다.  코드 더보기int lengthOfLongestSubstring(string s) { int left = 0, right = 0; set setBuff; int maxLen = 0; for (; right   결과

Leetcode/NeetCode 2024.07.09

[SlidingWindow][Easy] 121. Best Time to Buy and Sell Stock

https://leetcode.com/problems/best-time-to-buy-and-sell-stock/description/ 주식 가격이 주어진다. 이때 어느 하루에 사고, 어느 다른 하루에 판다면, 이 수익의 최대값을 구하라. 파는 날은 반드시 사는 날과 다른 이후의 날이어야 한다. 사는 날은 최대한 싸면 큰 차익의 결과가 기대될 것이다. 따라서 최소값에서 사고, 알수 없는 모든 값들에 대해 차(수익)의 최대값을 구한다. 코드 더보기int maxProfit(vector& prices) { if (prices.size()   결과

Leetcode/NeetCode 2024.07.09

[TwoPointers][Medium] 11. Container With Most Water

https://leetcode.com/problems/container-with-most-water/description/ 아래와 같이 수조가 있으며, 이때 높이의 배열이 주어진다. 물을 가장 많이 담은 때의 물의 면적을 구하라.  양 수조의 기둥을 좁히며 면적을 구한다. 면적은 간단히 구할 수 있다. 문제는 좁히는 방법이다. 양옆 기둥의 높이 중, 작은 쪽을 변경시켜 더 큰 결과를 얻는 것을 유도한다.  코드. 더보기int maxArea(vector& height) { int left = 0; int right = height.size() - 1; int maxArea = 0; while (left height[right]) --right; ..

Leetcode/NeetCode 2024.07.09

[TwoPointers][Medium] 15. 3Sum

https://leetcode.com/problems/3sum/description/  정수 배열이 주어질 때, 세 수의 합이 0 이 되는 수를 찾아라. 우선 정렬이 필요하다. 다음으로 첫수를 정하고, 그 뒤로는 두 수의 합을 구하는 로직과 같다.  다만, 중복이 없어야 하므로, 이는 여러 방법을 사용할 수 있겠다.  코드  더보기vector> threeSum(vector& nums) { sort(nums.begin(), nums.end()); vector> vRet; set vBuff; for (int q = 0; q { num0, nums[left], nums[right] }); vBuff.insert(temp); } ..

Leetcode/NeetCode 2024.07.09

[TwoPointers][Medium] 167. Two Sum II - Input Array Is Sorted

https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/description/ 주어진 정수 배열이 정렬되어 있을 때, 두 수의 합이 target이 되는 1based index를 출력하라. 정렬되어 있으므로, left, right를 이용하여 수의 범위를 좁힌다. target보다 sum이 크면 작아져야 하므로, right를 낮춘다. target보다 sum이 작으면 커져야 하므로, left를 높힌다.  코드 더보기vector twoSum(vector& numbers, int target) { int left = 0; int right = numbers.size() - 1; vector vRet; while (left { left+1..

Leetcode/NeetCode 2024.07.09