ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
S๋ฌธ์์ด์์ T๋ฌธ์์ด๊ณผ ์๋๊ทธ๋จ์ด ๋๋ S์ ๋ถ๋ถ๋ฌธ์์ด์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ธ์. ์๋๊ทธ๋จ ํ๋ณ์ ๋์๋ฌธ์๊ฐ ๊ตฌ๋ณ๋ฉ๋๋ค. ๋ถ๋ถ๋ฌธ์์ด์ ์ฐ์๋ ๋ฌธ์์ด์ด์ด์ผ ํฉ๋๋ค.
๋ฌธ์ ํ์ด
- Map1 ๊ฐ์ฒด์ ๋งจ ์ฒ์ ๋ฌธ์์์๋ถํฐ ์ฐ์๋ถ๋ถ ์์ด์ ์ต๋ ๋ฌธ์์ด ๊ธธ์ด๊น์ง์ ๋ฌธ์์ ๋ํ ๋ฐ์ดํฐ(Key, Value)๋ฅผ ์ ์ฌํ๋ค.
- ๋น๊ต์ ๊ธฐ์ค์ด ๋ Map2 ๊ฐ์ฒด์ 0~(T๋ฌธ์์ด ๊ธธ์ด - 1) ๋ฒ์์ ํด๋นํ๋ ๋ฌธ์๋ฅผ ์ ์ฌํ๋ค.
- ํด๋น ๋ฌธ์ ์์๋ ์ด๊ธฐ์ Map2 ๊ฐ์ฒด์ a์ b๊ฐ ์ ์ฌ๋๋ค.
- ๋ค์ ์ธ๋ฑ์ค ์์์์๋ถํฐ ๋ฐ๋ณต๋ฌธ์ ์์ํ์ฌ Map1 ๊ฐ์ฒด์ ํฌ์ธํฐ2๊ฐ ํ์ฌ ๊ฐ๋ฆฌํค๊ณ ์๋ ์ธ๋ฑ์ค(์์ ์ธ๋ฑ์ค ์์)์ ๋ฌธ์๋ฅผ ์ ์ฌํ๋ค.
- ๋ Map ๊ฐ์ฒด๋ฅผ ๋น๊ตํ๋ค.
- ๋น๊ต๊ฐ ๋๋ ๋ค์ ํฌ์ธํฐ1์ด ๊ฐ๋ฆฌํค๊ณ ์๋ ์ธ๋ฑ์ค ์์๋ฅผ Map1 ๊ฐ์ฒด์์ ์ญ์ ํ๋ค.
- ์ญ์ ์, value ๊ฐ์ด 0์ผ ๊ฒฝ์ฐ์๋ ๊ฐ์ด ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ delete ๋ฉ์๋๋ฅผ ํตํด Key๊ฐ์ ์์ ํ ์ญ์ ํด์ฃผ๊ณ ์๋ ๊ฒฝ์ฐ์๋ 1๋งํผ ๊ฐ์ฐํด์ค๋ค.
์ฝ๋
function compareMaps(map1, map2) {
if(map1.size !== map2.size) return false;
for(let [key, val] of map1) {
if(!map2.has(key) && map2.get(key) === val) return false;
}
return true;
}
function solution(s1, s2) {
let answer = 0;
let sH1 = new Map();
let sH2 = new Map();
let p1 = 0;
let p2 = 0;
for (let i = 0; i < s2.length; i++) {
if (!sH1.has(s1[i]) || sH2.has(s2[i])) {
sH1.set(s1[i], 1);
sH2.set(s2[i], 1);
} else {
sH1.set(s1[i], sH1.get(s1[i]) + 1);
sH2.set(s2[i], sH2.get(s2[i]) + 1);
}
}
for(let i = 0; i < s1.length; i++) {
if(!sH1.has(s1[++p2])) {
sH1.set(s1[p2], 1);
} else {
sH1.set(s1[p2], sH1.get(s1[p2]) + 1);
}
if((p2 - p1) === 2) {
//๋ ํฌ์ธํฐ๊ฐ ์ฐธ์กฐํ๊ณ ์๋ ์ธ๋ฑ์ค ๊ฐ ์ฐจ์ด๊ฐ 2์ผ ๊ฒฝ์ฐ => ์ฐ์๋ถ๋ถ์์ด์ ์์ ๊ฐฏ์ ์กฐ๊ฑด์ ํฉ๋นํ ๊ฒฝ์ฐ
let result = compareMaps(sH1, sH2);
if(result === true) answer++;
sH1.delete(s1[p1++]);
}
}
return answer;
}
let str1 = "bacaAacba";
let str2 = "abc";
console.log(solution(str1, str2));
function compareMaps(map1, map2){
if(map1.size!==map2.size) return false;
for(let [key, val] of map1){
if(!map2.has(key) || map2.get(key)!==val) return false;
}
return true;
}
function solution(s, t){
let answer=0;
let tH = new Map();
let sH = new Map();
for(let x of t){
if(tH.has(x)) tH.set(x, tH.get(x)+1);
else tH.set(x, 1);
}
let len=t.length-1;
for(let i=0; i<len; i++){
if(sH.has(s[i])) sH.set(s[i], sH.get(s[i])+1);
else sH.set(s[i], 1);
}
let lt=0;
for(let rt=len; rt<s.length; rt++){
if(sH.has(s[rt])) sH.set(s[rt], sH.get(s[rt])+1);
else sH.set(s[rt], 1);
if(compareMaps(sH, tH)) answer++;
sH.set(s[lt], sH.get(s[lt])-1);
if(sH.get(s[lt])===0) sH.delete(s[lt]);
lt++;
}
return answer;
}
let a="bacaAacba";
let b="abc";
console.log(solution(a, b));
'์๊ณ ๋ฆฌ์ฆ > ํ๊ทธ ๋ณ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ดํธ๋ฌธ์์ ๊ฑฐ (0) | 2021.07.11 |
---|---|
[์คํ]์ฌ๋ฐ๋ฅธ ๊ดํธ (0) | 2021.07.10 |
[ํด์ฌ]์๋๊ทธ๋จ (0) | 2021.07.08 |
[ํด์ฌ]ํ๊ธ ํ์ฅ (0) | 2021.07.07 |
[์ฌ๋ผ์ด๋ฉ ์๋์ฐ]์ต๋ ๋งค์ถ (0) | 2021.07.06 |
๋๊ธ