728x90
문제
https://www.acmicpc.net/problem/20922
풀이
이번 문제는 투 포인터 알고리즘을 이용한 풀이가 필요한 문제이다.
연속된 수열중 겹치는 수의 갯수를 새기위해 Map 객체를 이용해 각 숫자의 갯수를 저장하며 탐색을 진행했다.
코드
const input = require("fs")
.readFileSync(
process.platform === "linux" ? "/dev/stdin" : __dirname + "/example.txt"
)
.toString()
.trim()
.split("\n")
.map((e) => e.trim());
const [n, k] = input.shift().split(" ").map(Number);
const numArr = input[0].split(" ").map(Number);
let [lp, rp] = [0, 0];
let answer = 0;
let map = new Map();
while (lp <= rp) {
if (!map.has(numArr[rp]) && rp < n) {
map.set(numArr[rp], 1);
rp++;
} else if (map.get(numArr[rp]) < k && rp < n) {
map.set(numArr[rp], map.get(numArr[rp]) + 1);
rp += 1;
} else {
map.set(numArr[lp], map.get(numArr[lp]) - 1);
lp++;
}
answer = Math.max(rp - lp, answer);
}
console.log(answer);
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[JS] 1, 2, 3 더하기 4 (0) | 2025.04.22 |
---|---|
[JS] 쉬운 최단거리 (0) | 2025.04.18 |
[JS] 랭킹전 대기열 (0) | 2025.04.11 |
[JS] 12919_A와 B 2 (0) | 2025.04.10 |
[JS] 4659_비밀번호 발음하기 (0) | 2025.04.08 |