const fs = require("fs");
const input = fs
.readFileSync(process.platform === "linux" ? "dev/stdin" : "input.txt")
.toString()
.trim();
const str = input.split("");
const RidxList = [];
const prefixK = Array(str.length).fill(0);
let idx = 0;
let KNum = 0;
for (let char of str) {
if (char === "R") {
RidxList.push(idx);
}
if (char === "K") {
KNum++;
}
prefixK[idx] = KNum;
idx++;
}
let maxLength = 0;
let leftIdx = 0;
let rightIdx = RidxList.length - 1;
while (leftIdx <= rightIdx) {
let leftR = RidxList[leftIdx];
let rightR = RidxList[rightIdx];
let numOfLeftK = prefixK[leftR];
let numOfRightK = KNum - prefixK[rightR];
lenghtOfStr = rightIdx - leftIdx + 1 + 2 * Math.min(numOfLeftK, numOfRightK);
if (maxLength < lenghtOfStr) {
maxLength = lenghtOfStr;
}
if (numOfLeftK <= numOfRightK) {
leftIdx++;
} else if (numOfLeftK > numOfRightK) {
rightIdx--;
}
}
console.log(maxLength);
- R사이에 K를 제거해서 부분 수열을 만드는게 고민되는 지점이었음
- 투포인터 쓰는 개념이 넘 어려웠음