diff --git a/longest-repeating-character-replacement/sadie100.ts b/longest-repeating-character-replacement/sadie100.ts new file mode 100644 index 0000000000..9017f2cd06 --- /dev/null +++ b/longest-repeating-character-replacement/sadie100.ts @@ -0,0 +1,34 @@ +/* +start, end 투 포인터 변수를 생성하고 end를 하나씩 늘려 가며 s를 탐색 +글자별 개수를 저장하는 map, 최빈 등장수 maxCount를 통해 가장 많이 나온 캐릭터의 카운트를 저장하고 +만약 end-start+1-maxCount가 k를 넘어가면 start를 +1한다 +매번 end-start+1와 현 result를 비교하여 큰 값을 result로 갱신한다 + +시간복잡도 : O(N) +*/ + +function characterReplacement(s: string, k: number): number { + let start = 0 + let end = 0 + let result = 0 + let maxCount = 0 + const charMap = new Map() + + while (end < s.length) { + const thisChar = s[end] + const updatedCount = (charMap.get(thisChar) || 0) + 1 + charMap.set(thisChar, updatedCount) + maxCount = Math.max(maxCount, updatedCount) + + if (end - start + 1 - maxCount > k) { + const startChar = s[start] + charMap.set(startChar, charMap.get(startChar) - 1) + start += 1 + } + + result = Math.max(result, end - start + 1) + end += 1 + } + + return result +} diff --git a/reverse-bits/sadie100.ts b/reverse-bits/sadie100.ts new file mode 100644 index 0000000000..f079c8c382 --- /dev/null +++ b/reverse-bits/sadie100.ts @@ -0,0 +1,19 @@ +/** + n의 뒤의 자리에서부터 비트로 변환해서 result에 붙이고, result 비트를 앞으로 당기는 일을 32번 반복해서 뒤집어진 비트를 만든다 + + 시간복잡도 : O(1) - 비트 연산 + 공간복잡도 : O(1) + */ + +function reverseBits(n: number): number { + let result = 0 + + for (let i = 0; i < 32; i++) { + const bit = n & 1 + + result = (result << 1) | bit + + n = n >>> 1 + } + return result >>> 0 +}