diff --git a/longest-repeating-character-replacement/jaejeong1.kt b/longest-repeating-character-replacement/jaejeong1.kt new file mode 100644 index 0000000000..1837947c15 --- /dev/null +++ b/longest-repeating-character-replacement/jaejeong1.kt @@ -0,0 +1,27 @@ +import kotlin.math.max + +fun characterReplacement(s: String, k: Int): Int { + // 시간복잡도: O(N) 공간복잡도: O(1) + + val frequencyMap = mutableMapOf() + var left = 0 + var maxFreq = 0 + var result = 0 + // 처음부터 끝까지 right 순회 + for (right in s.indices) { + // right 위치 문자에 빈도를 증가시키고 map 저장 + val rightChar = s[right] + frequencyMap[rightChar] = frequencyMap.getOrDefault(rightChar, 0) + 1 + maxFreq = max(maxFreq, frequencyMap[rightChar]!!) + + val windowSize = right - left + 1 + val downSizeNeeded = windowSize - maxFreq + + if (downSizeNeeded > k) { + val leftChar = s[left] + frequencyMap[leftChar] = frequencyMap[leftChar]!! - 1 + left++ + } + result = max(result, right - left + 1) + } +} diff --git a/reverse-bits/jaejeong1.kt b/reverse-bits/jaejeong1.kt new file mode 100644 index 0000000000..569e24bdee --- /dev/null +++ b/reverse-bits/jaejeong1.kt @@ -0,0 +1,13 @@ +fun reverseBits(n: Int): Int { + var x = n + var result = 0 + //시간복잡도: O(N) 공간복잡도: O(1) + repeat(32) { + // result를 왼쪽으로 1비트 밀어서 빈자리를 만듬 + result = (result shl 1) + // x의 맨 오른쪽 1자리를 result의 맨 오른쪽에 할당 + result = result or (x and 1) + // x 를 오른쪽으로 1비트 민다 + x = (x ushr 1) + } +}