๐ฉ๐ปโ๐ป๋ฌธ์ ๋งํฌ
[์ธํ๋ฐ ์น์
5] ๋ชจ๋ ์๋๊ทธ๋จ ์ฐพ๊ธฐ (Javascript)
์ ๋ฃ ๊ฐ์์ธ ๊ด๊ณ๋ก ๋ฌธ์ ์ค๋ช
์ ์๋ตํฉ๋๋ค.
โ๏ธIdea Sketch
2021-06-25
1. ๋ถ๋ถ๋ฌธ์์ด์ ์ผ์ผ์ด str.substring()์ผ๋ก ์๋ผ๋ด์ผํ๋? ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์๋?
2. ๋ฌธ์์ด T๋ฅผ hash๋ก ์ ํ
3. 2๋ฒ๊ณผ ๋์์ ๋ฌธ์์ด S๋ฅผ ๋ฌธ์์ด T์ ๊ธธ์ด๋งํผ๋ง hash๋ก ์ ํ
for (let i=0; i<len; i++) {
hashS.set(strS[i], (hashS.get(strS[i]) || 0) + 1);
hashT.set(strT[i], (hashT.get(strT[i]) || 0) + 1);
}
์ฃผ์
์ด๊ธฐ๊ฐ hashS๊ฐ hashT์ ์ผ์นํ๋์ง ํ์ธํด์ผ ํจ
3. ๊ทธ ๋ค์ ๋ถ๋ถ๋ฌธ์์ด ๊ตฌํ๊ธฐ (hashS ์ ๋ฐ์ดํธ)
- ๋ฐฉ๋ฒ 1. left, right ๋ณ์๋ฅผ ์ฌ์ฉํด hash.set(val, -1), hash.set(val, +1)
- ๋ฐฉ๋ฒ 2. ๋ณ์ i ํ๋๋ง ์ฌ์ฉํ์ฌ i๋ฒ์งธ ๋ฌธ์, i-len ์ฐ์ฐ
hashS.set(strS[i], (hashS.get(strS[i]) || 0) + 1);
hashS.set(strS[i-len], hashS.get(strS[i]) - 1);
5. hashS์ hashT์ ์ผ์น์ฌ๋ถ ํ์ธ
- true/false์ ๋ฐ๋ผ cnt++๋ฅผ ํ๊ธฐ ์ํด, isEquel() ํจ์ ์ ์
function isEquel(hashS, hashT) {
for (let [key, val] of hashT) {
if (val !== hashS.get(key)) return false;
}
return true;
}
if (isEquel(hashS, hashT)) cnt++;
โ๏ธ์์ค์ฝ๋
2021-06-25
function isEquel(hashS, hashT) {
for (let [key, val] of hashT) {
if (val !== hashS.get(key)) return false;
}
return true;
}
function solution(strS, strT) {
let cnt = 0;
let hashS = new Map(), hashT = new Map();
let len = strT.length;
for (let i=0; i<len; i++) {
hashS.set(strS[i], (hashS.get(strS[i]) || 0) + 1);
hashT.set(strT[i], (hashT.get(strT[i]) || 0) + 1);
}
if (isEquel(hashS, hashT)) cnt++;
for (let i=len; i<strS.length; i++) {
hashS.set(strS[i], (hashS.get(strS[i]) || 0) + 1);
hashS.set(strS[i-len], hashS.get(strS[i-len]) - 1);
if(isEquel(hashS, hashT)) cnt++;
}
return cnt;
}