diff --git a/longest-repeating-character-replacement/uraflower.js b/longest-repeating-character-replacement/uraflower.js new file mode 100644 index 000000000..1f094c243 --- /dev/null +++ b/longest-repeating-character-replacement/uraflower.js @@ -0,0 +1,32 @@ +/** + * 주어진 문자열에서 최대 k개를 대체해 가장 긴 동일 문자 반복 부분 문자열을 만들 수 있을 때, + * 이 문자열의 길이를 반환하는 함수 + * @param {string} s + * @param {number} k + * @return {number} + */ + const characterReplacement = function(s, k) { + let start = 0; + let end = 0; + let counter = {}; + let maxFrequent = 0; // 현재 구간에 가장 많이 포함되어 있는 알파벳의 총 개수 + let maxLength = 0; + + while (start <= end && end < s.length) { + counter[s[end]] = (counter[s[end]] || 0) + 1; + maxFrequent = Math.max(maxFrequent, counter[s[end]]); + + while (end - start + 1 - maxFrequent > k) { + counter[s[start]]--; + start++; + } + + maxLength = Math.max(end - start + 1, maxLength); + end++; + } + + return maxLength; +}; + +// 시간복잡도: O(n) +// 공간복잡도: O(1) diff --git a/reverse-bits/uraflower.js b/reverse-bits/uraflower.js new file mode 100644 index 000000000..75bf8777a --- /dev/null +++ b/reverse-bits/uraflower.js @@ -0,0 +1,15 @@ +/** + * 주어진 32비트 unsingned integer를 뒤집어 십진수로 반환하는 함수 + * @param {number} n - a positive integer + * @return {number} - a positive integer + */ +const reverseBits = function(n) { + const binary = n.toString(2).padStart(32, '0'); + const reversed = Array.from(binary).reverse().join(''); + const decimal = parseInt(reversed, 2).toString(10); + + return Number(decimal); +}; + +// 시간복잡도: O(1) +// 공간복잡도: O(1)