[LeetCode] 2352. Equal Row and Column Pairs, Medium
·
CodingTest/LeetCode
1. 문제n x n 크기의 grid가 주어질 때, 행과 열이 같은 경우의 수를 반환하라.2. 해결function equalPairs(grid: number[][]): number { const rowMap = new Map(); const colMap = new Map(); for (let i = 0; i r[i]).join(','); rowMap.set(row, (rowMap.get(row) || 0) + 1); colMap.set(col, (colMap.get(col) || 0) + 1); } let ans = 0; for (const [str, rowCount] of rowMap) { const colCount = colMap...
[LeetCode] 1657. Determine if Two Strings Are Close, Medium
·
CodingTest/LeetCode
1. 문제문자열 word1, word2가 주어질 때 아래 연산을 거쳐 다른 문자열과 동일하게 만들 수 있는 지 여부를 반환하라.연산1: 문자열 내 존재하는 다른 문자와 바꿀 수 있다.연산2: 연속되는 문자열을 다른 문자와 바꿀 수 있다.2. 해결function closeStrings(word1: string, word2: string): boolean { const map1 = new Map(), map2 = new Map(); for(const char of word1) { map1.set(char, (map1.get(char) || 0) + 1) } for(const char of word2) { map2.set(char, (map2.get(char) |..
[LeetCode] 1493. Longest Subarray of 1's After Deleting One Element, Medium
·
CodingTest/LeetCode
1. 문제0과 1로 구성된 nums가 주어질 때, 1개의 요소를 삭제해서 만들 수 있는 1의 연속 서브 시퀀스의 최대 길이를 반환하라.2. 해결function longestSubarray(nums: number[]): number { if(!nums.includes(0)) return nums.length - 1; let max = Number.MIN_SAFE_INTEGER; let left = 0, right = 0; let count = 0; while(right 1) { if(nums[left] === 0) count--; left++; } max = Math.max(max, right - left); ..
[LeetCode] 1004. Max Consecutive Ones III, Medium
·
CodingTest/LeetCode
1. 문제0과 1로 이루어진 배열 nums가 주어지고 정수 k가 주어질 때, k번 만큼만 0을 1로 바꿔 연속된 1의 길이가 가장 긴 경우를 구하라.2. 해결function longestOnes(nums: number[], k: number): number { let left = 0, right = 0; let max = Number.MIN_SAFE_INTEGER; let count = 0; while(right k) { if(nums[left] === 0) count--; left++; } max = Math.max(max, right-left + 1); right++; } return max..
[LeetCode] 1456. Maximum Number of Vowels in a Substring of Given Length, Medium
·
CodingTest/LeetCode
1. 문제문자열 s와 정수 k가 주어질 때, k 길이 문자열 내에 가장 많은 모음이 등장하는 횟수를 반환하라.2. 해결function maxVowels(s: string, k: number): number { const vowels = 'aeiou'; let max = Number.MIN_SAFE_INTEGER; let count = 0; let left = 0, right = 0; while(right 연속된 구간 내 모음의 수가 중요한 것이므로 두 포인터는 앞에서 부터 시작.모음을 만나면 count를 증가시키며 right 증가.k길이에 도달하면, max를 갱신하고 left 감소.이 때, left가 모음이면 count도 감소.
[LeetCode] 1679. Max Number of K-Sum Pairs, Medium
·
CodingTest/LeetCode
1. 문제정수 배열 nums와 k가 주어질 때, 두 요소의 합이 k가 되는 경우 연산 횟수를 반환하라.2. 해결function maxOperations(nums: number[], k: number): number { nums.sort((a,b) => a-b) let left = 0, right = nums.length-1; let ans = 0; while(left 정수 배열 요소의 합을 투 포인터로 관리하기 위해선, 정렬이 필요하다. (그래야 left를 옮길지 right를 옮길지 정하니까)합이 k와 같으면 연산횟수가 증가하고, 두 포인터를 좁힌다.합이 k보다 작으면 left의 값을 증가시킨다.합이 k보다 크면 right의 값을 감소시킨다.
[LeetCode] 11. Container With Most Water, Medium
·
CodingTest/LeetCode
1. 문제높이 정보가 담긴 배열 height이 주어질 때, 두 개의 라인 안에 가장 많은 물을 담을 수 있는 양을 반환하라.2. 해결function maxArea(height: number[]): number { let max = Number.MIN_SAFE_INTEGER; let left =0 , right = height.length -1; while(left height[right]) { right--; } else { left++; } } return max;};처음에는 앞에서 두 포인터를 시작하려고 했는데, 이건 보통 연속된 구간이나 서브 시퀀스를 구할 때 이렇게 한다고 한다.이 경우는 두 구간 사이의 ..
[LeetCode] 443. String Compression, Medium
·
CodingTest/LeetCode
1. 문제문자열 배열 chars가 주어질 때, 아래 알고리즘에 따라 압축한 문자열 길이를 반환하라.빈 문자열 s부터 시작.연속되는 동일한 문자열을 그룹화.그룹화한 문자열 길이가 1인 경우, 다음 문자열에 붙인다.원본 배열 chars를 수정하여 압축한 결과를 담아 길이를 반환한다.a, a, b, b, b, c, c는 a,2,b,2,c,2로 압축.a, b, b, b,b ... 에서 a는 그룹 길이가 1이므로, a, b, 1, 2로 압축.2. 해결function compress(chars: string[]): number { let s = '' let current = chars[0]; let count = 0; for(let i = 0; ichars를 탐색하면서, 현재 문자열이 변경되면..
[LeetCode] 238. Product of Array Except Self, Medium
·
CodingTest/LeetCode
1. 문제정수 배열 nums가 주어질 때, answer[i]에 자기 자신을 제외한 요소의 곱을 저장한 배열을 반환하라.2. 해결function productExceptSelf(nums: number[]): number[] { const n = nums.length; const ans = new Array(n).fill(1); let left = 1; for(let i =0; i=0; i--) { ans[i] *= right; right *= nums[i]; } return ans}못풀었다.prefix Sum이라는 기법을 사용하는 거 같은데, ans를 배열로 선언하고, 왼쪽 -> 오른쪽으로 향하면서 i번 째 정답 배열에 i-1까지의 곱..
[LeetCode] 235. Lowest Common Ancestor of a Binary Search Tree, Medium
·
CodingTest/LeetCode
1. 문제BST와 p, q노드가 주어질 때, p와 q의 공통 조상 노드를 반환하라.2. 해결/** * Definition for a binary tree node. * class TreeNode { * val: number * left: TreeNode | null * right: TreeNode | null * constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (r..