๐ ๋ฌธ์ ์ค๋ช
์๋ ์ ์ด์ด ์๋ก์ด ๋ฌธ์์ด ๊ฒ์์ด ์๋ค. ๊ฒ์์ ์งํ ๋ฐฉ์์ ์๋์ ๊ฐ๋ค.
- ์ํ๋ฒณ ์๋ฌธ์๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด W๊ฐ ์ฃผ์ด์ง๋ค.
- ์์ ์ ์ K๊ฐ ์ฃผ์ด์ง๋ค.
- ์ด๋ค ๋ฌธ์๋ฅผ ์ ํํ K๊ฐ๋ฅผ ํฌํจํ๋ ๊ฐ์ฅ ์งง์ ์ฐ์ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ค.
- ์ด๋ค ๋ฌธ์๋ฅผ ์ ํํ K๊ฐ๋ฅผ ํฌํจํ๊ณ , ๋ฌธ์์ด์ ์ฒซ ๋ฒ์งธ์ ๋ง์ง๋ง ๊ธ์๊ฐ ํด๋น ๋ฌธ์๋ก ๊ฐ์ ๊ฐ์ฅ ๊ธด ์ฐ์ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ค.
์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ฒ์์ Tํ ์งํํ๋ค.
๐ ์ ๋ ฅ
๋ฌธ์์ด ๊ฒ์์ ์ T๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ T ≤ 100)
๋ค์ ์ค๋ถํฐ 2๊ฐ์ ์ค ๋์ ๋ฌธ์์ด W์ ์ ์ K๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ K ≤ |W| ≤ 10,000)
๐ ์ถ๋ ฅ
T๊ฐ์ ์ค ๋์ ๋ฌธ์์ด ๊ฒ์์ 3๋ฒ๊ณผ 4๋ฒ์์ ๊ตฌํ ์ฐ์ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๊ณต๋ฐฑ์ ์ฌ์ด์ ๋๊ณ ์ถ๋ ฅํ๋ค.
๋ง์ฝ ๋ง์กฑํ๋ ์ฐ์ ๋ฌธ์์ด์ด ์์ ์ -1์ ์ถ๋ ฅํ๋ค.
๐ซ ์ ํ์ฌํญ
- 1 ≤ T ≤ 100
- 1 ≤ K ≤ |W| ≤ 10,000
- ์๊ฐ์ ํ : 1 s
โค๏ธ ๋ฌธ์ ํ์ด ๋ฐฉ๋ฒ
์ฝ์ง 1 : ์ฒ์์๋ ๋ฌธ์์ด ์ ํ ์ฌํญ์ ์ ๋ชป ๋ณด๊ณ ๋จ์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ํด๊ฒฐํ๋ ค๋ค๊ฐ ์ ๋ ์๋๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๋ค.
์ฝ์ง 2 : ๋ค๋ฅธ ๋ถ๋ค์ ํ์ด๋ฅผ ์ฐธ๊ณ ํด์ ๋ฌธ์์ด index๋ฅผ ์ ์ฅํ๋ฉด ๋๋ค๋ ๊ฒ์ ์๊ฒ ๋๋๋ฐ, Object์ ์ ์ฅํ ๋ ์๋์ฒ๋ผ ์ ์๋ค๊ฐ ๊ณ์ ์๋ฌ๊ฐ ๋ฌ๋ค.
strObj[char] = strObj[char] ? strObj[char].push(j) : [j];
์ ์ด๋ ๊ฒ ์ ์๋์ง ์ง๋๊ณ ๋๋๊น ์ดํด๊ฐ ์๋๋ค ใ ใ ใ ์ํผ ์ด๊ฑฐ ๋๋ฌธ์ ์ค๋ ๊ฑธ๋ ธ๋ค.
1๏ธโฃ ์ธ๋ฑ์ค ์ ์ฅ ํ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
์ฐ์ ๋ฌธ์์ด ๊ธธ์ด๊ฐ ์ต๋ 1๋ง์ด๋๊น ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋๋ฒ์ด์ ๋๋ฉด ์๋๋ค๋ ์ ์ ์ฃผ์ํด์ผ ํ๋ค. => ์ง์ ๋๋ฉด์ ๋น๊ต ๋ถ๊ฐ !!!
๊ทธ๋ฌ๋ฉด ์ด๋ป๊ฒ ๊ฐ์ ๋ฌธ์์ด๋ค์ ํ์ธํ ์ ์์๊น ??
๊ฐ์ฒด ํ์ ์ ํ์ฉํด์ ๋ฌธ์์ด๋ง๋ค ๋ฑ์ฅํ๋ ์ธ๋ฑ์ค๋ฅผ ์ ์ฅํด๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํ๋ฒ์ ๋ฐ๋ณต๋ฌธ ์ฌ์ฉ์ผ๋ก ๋ฌธ์๋ค์ ์์น๋ฅผ ๋ชจ๋ ์ ์ ์๋ค.
์ด ๊ฐ์ฒด๋ฅผ ํ์ฉํด์, ํ์ k๋ฒ ๋ฑ์ฅ ๊ธฐ์ค ๊ฐ์ฅ ์๊ฑฐ๋ ํฐ ๊ธธ์ด๋ฅผ ํ์ธํ๋ฉด ๋๋ค.
const fs = require("fs");
const input = fs.readFileSync("test.txt", "utf-8").trim().split("\n");
function solution() {
const t = Number(input[0]);
const rest = input.slice(1);
const strArr = rest.filter((_, idx) => idx % 2 === 0).map((v) => v.trim());
const k = rest.filter((_, idx) => idx % 2 === 1).map(Number);
for (let i = 0; i < strArr.length; i++) {
let strObj = {};
for (let j = 0; j < strArr[i].length; j++) {
let char = strArr[i][j];
if (!strObj[char]) {
strObj[char] = [];
}
strObj[char].push(j);
}
let minLen = Number.MAX_SAFE_INTEGER;
let maxLen = 0;
for (let char in strObj) {
if (strObj[char].length < k[i]) continue;
for (let d = 0; d < strObj[char].length - k[i] + 1; d++) {
let diff = strObj[char][d + k[i] - 1] - strObj[char][d] + 1;
if (minLen > diff) minLen = diff;
if (maxLen < diff) maxLen = diff;
}
}
console.log(maxLen === 0 ? "-1" : minLen + " " + maxLen + "");
}
}
solution();
'๐ algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] ์ต์๋น์ฉ ๊ตฌํ๊ธฐ (0) | 2025.02.13 |
---|---|
[๋ฐฑ์ค] Z - JavaScript ๋ฌธ์ ํ์ด (0) | 2025.02.12 |
[๋ฐฑ์ค] ๋น๋ฌผ - JavaScript ํ์ด (0) | 2025.02.11 |
[์๊ณ ๋ฆฌ์ฆ] ๋ฐฑ์ค 2447 ๋ณ์ฐ๊ธฐ - 10 JAVA ๋ฌธ์ ํ์ด (2) | 2024.03.24 |
[Algorithm] ๋ณํฉ์ ๋ ฌ์ ๋ํด ์์๋ณด์ !! ๐ (0) | 2024.03.21 |