diff --git a/longest-repeating-character-replacement/ICE0208.java b/longest-repeating-character-replacement/ICE0208.java new file mode 100644 index 0000000000..f2539a5aa0 --- /dev/null +++ b/longest-repeating-character-replacement/ICE0208.java @@ -0,0 +1,25 @@ +class Solution { + public int characterReplacement(String s, int k) { + int[] frequency = new int[26]; + int maxFrequency = 0; + int left = 0; + int maxLength = 0; + + for (int right = 0; right < s.length(); right++) { + int index = s.charAt(right) - 'A'; + frequency[index]++; + + // maxFrequency 갱신 + maxFrequency = Math.max(maxFrequency, frequency[index]); + + // right - left + 1 - maxFrequency : 현재 위도우에서 maxFrequency를 제외한 개수 + while (right - left + 1 - maxFrequency > k) { + frequency[s.charAt(left) - 'A']--; + left++; + } + + maxLength = Math.max(maxLength, right - left + 1); + } + return maxLength; + } +} diff --git a/reverse-bits/ICE0208.java b/reverse-bits/ICE0208.java new file mode 100644 index 0000000000..c23eeda693 --- /dev/null +++ b/reverse-bits/ICE0208.java @@ -0,0 +1,29 @@ +class Solution2 { + public int reverseBits(int n) { + int result = 0; + + for (int i = 0; i < 32; i++) { + int lastBit = n & 1; // 가장 오른쪽 비트 추출 + + result <<= 1; // 새 비트를 넣을 자리 확보 + result |= lastBit; // 추출한 비트를 오른쪽 끝에 추가 + + n >>>= 1; // 처리한 비트를 버림. + } + + return result; + } +} + +class Solution { + public int reverseBits(int n) { + String binary = String.format("%32s", Integer.toBinaryString(n)) + .replace(' ', '0'); + + String reversed = new StringBuilder(binary) + .reverse() + .toString(); + + return Integer.parseUnsignedInt(reversed, 2); + } +}