Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 81 additions & 0 deletions longest-repeating-character-replacement/leehyeyun.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
/**
* @param {string} s
* @param {number} k
* @return {number}
*/
/*
문제 설명:
주어진 문자열 s와 정수 k가 주어진다.

문자열 s는 대문자 영어 알파벳(A~Z)으로만 구성되어 있으며,
문자열의 길이는 최대 100,000이다.

하나의 연산에서는 문자열 s의 임의의 문자 하나를 선택하여
다른 어떤 대문자 알파벳 문자로든 변경할 수 있다.
이 연산은 최대 k번까지 수행할 수 있다.

목표는 연산을 최대 k번까지 수행한 후,
모든 문자가 동일한 가장 긴 연속 부분 문자열(substring)의 길이를 구하는 것이다.

여기서 부분 문자열은 반드시 연속된 문자들로 이루어져야 하며,
문자열의 일부를 건너뛸 수는 없다.

입력:
- s: 대문자 영어 알파벳으로 이루어진 문자열
- k: 수행 가능한 최대 문자 변경 횟수
- 1 ≤ s.length ≤ 100,000
- 0 ≤ k ≤ s.length

출력:
- 최대 k번의 문자 변경을 통해 만들 수 있는
모든 문자가 같은 가장 긴 연속 부분 문자열의 길이

예시 1:
입력:
s = "ABAB", k = 2
설명:
두 문자를 변경하여 "AAAA" 또는 "BBBB"로 만들 수 있다.
출력:
4

예시 2:
입력:
s = "AABABBA", k = 1
설명:
한 문자를 변경하여 연속된 "BBBB" 부분 문자열을 만들 수 있다.
출력:
4

주의 사항:
- 변경은 반드시 최대 k번까지만 가능하다.
- 최종적으로 선택한 부분 문자열은
모든 문자가 동일해야 한다.
*/

var characterReplacement = function(s, k) {
let left = 0;
let maxLen = 0;
let count = {};
let maxCount = 0;

for (let right = 0; right < s.length; right++)
{
const char = s[right];
count[char] = (count[char] || 0) + 1;

maxCount = Math.max(maxCount, count[char]);

while ((right - left + 1) - maxCount > k) {
count[s[left]]--;
left++;
}

maxLen = Math.max(maxLen, right - left + 1);
}

return maxLen;
};

console.log(characterReplacement("ABAB",2))
console.log(characterReplacement("AABABBA",1))

65 changes: 65 additions & 0 deletions reverse-bits/leehyeyun.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
/**
* @param {number} n
* @return {number}
*/
/*
문제 설명:
주어진 32비트 부호 있는 정수 n의 비트 순서를 뒤집는 문제이다.

n은 항상 32비트 이진수로 취급되며,
가장 오른쪽 비트는 가장 왼쪽으로,
가장 왼쪽 비트는 가장 오른쪽으로 이동한다.
즉, 32개의 비트 전체를 기준으로 순서를 완전히 반전시킨다.

이때 숫자의 크기나 부호가 아니라,
고정된 32비트 이진 표현 자체를 기준으로 처리해야 하며
앞쪽에 있는 0 비트도 반드시 포함된다.

입력:
- n: 32비트 부호 있는 정수
- 0 ≤ n ≤ 2³¹ − 2
- n은 항상 짝수이다.

출력:
- n의 32비트 이진 표현을 뒤집은 값을 정수로 반환한다.

예시 1:
입력:
n = 43261596
이진 표현:
00000010100101000001111010011100
비트 순서 반전:
00111001011110000010100101000000
출력:
964176192

예시 2:
입력:
n = 2147483644
이진 표현:
01111111111111111111111111111100
비트 순서 반전:
00111111111111111111111111111110
출력:
1073741822

추가 조건 (Follow up):
- 이 함수가 매우 자주 호출되는 상황을 가정하고,
성능을 최적화할 수 있는 방법을 고려해야 한다.
*/

var reverseBits = function(n) {

const binaryString = n.toString(2).padStart(32, "0");
const splitString = binaryString.toString().split("");
const reverseArray = splitString.reverse();
const joinArray = reverseArray.join("");
const value = parseInt(joinArray, 2);

return value;

};

console.log(reverseBits(43261596))
console.log(reverseBits(2147483644))