Algorithm/Baekjoon
[JavaScript/node.js] ๋ฐฑ์ค 1522๋ฒ - ๋ฌธ์์ด ๊ตํ
๊ฐ๋ฐ๊ฐ๊ตด๐ธ
2022. 8. 24. 17:45
[๋ฌธ์ ]
https://www.acmicpc.net/problem/1522
[ํ์ด]
- a๋ฅผ ๋ชจ๋ ์ฐ์์ ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด์ ์ฐ์ ๋ฌธ์์ด์ ์ด a ๊ฐ์๋ฅผ ๊ตฌํด์ผ ํฉ๋๋ค.
- a์ ์ด ๋ฌธ์ ๊ฐ์(len)์ ๊ตฌ๊ฐ์ผ๋ก ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ฅผ ํตํด ๊ตฌ๊ฐ์ ํฌํจ๋ a์ ๊ฐ์๋ฅผ ๊ตฌํฉ๋๋ค.
- (์ด a์ ๊ฐ์(len)) - (๊ฐ์ฅ ๋ง์ ๊ฐ์๋ฅผ ํฌํจํ ๊ตฌ๊ฐ์ a๊ฐ ์)๋ฅผ ํตํด ์ต์ ์ด๋ ํ์๋ฅผ ๊ตฌํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ฌธ์์ด์ด "ababa"๋ผ๊ณ ํ๋ค๋ฉด ํ์ด ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
len = 3 ์ด๋ฏ๋ก 3 ๊ตฌ๊ฐ์ฉ ์ด๋ํ๋ฉฐ ๊ธธ์ด๋ฅผ ๊ตฌํ๋๋ฐ, ์ด๋ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ด๊ธฐ๊ฐ์ผ๋ก ์ธ๋ฑ์ค aba ์์ a์ ๊ฐ์๋ฅผ ๊ตฌํ๋ฉด sum = 2์ ๋๋ค.
- ๋ค์ ๊ตฌ๊ฐ๋ถํด ์๋ก ๋ค์ด์จ ๊ฐ์ด b ์ด๊ณ , ๊ตฌ๊ฐ์์ ์ ์ธ๋ ๊ฐ์ด a ์ด๋ฏ๋ก sum + 0 - 1 = 1๋ก bab๋ 1์ด ๋ฉ๋๋ค.
- ์ ๊ณผ์ ์ ๋ฐ๋ณตํ์ฌ ๋ง์ง๋ง ๊ตฌ๊ฐ๊น์ง ๊ตฌํ๋ฉด ์ต๋ sum ๊ฐ์ 2๊ฐ ๋๋ฏ๋ก b๋ฅผ 1๋ฒ๋ง ๊ต์ฒดํ๋ฉด ์ฐ์๋ aaa๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ต์ ๊ต์ฒด ํ์๋ 1์ ๋๋ค.
[์ฝ๋]
const fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().split('\n');
const word = input[0].split("").map(String);
const len = word.filter((i) => i === 'a').length;
// len ์ฉ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ฅผ ํด์ a๊ฐ ๊ฐ์ฅ ๋ง์ ๊ตฌ๊ฐ ์ฐพ๊ธฐ
// ์ด๊ธฐ๊ฐ ์ธํ
let sum = 0;
for(let i=0;i<len;i++) {
sum += word[i] === 'a' ? 1 : 0;
}
// ๊ฐ์ฅ ํฐ ๊ฐ ์ฐพ๊ธฐ ์ํด ์ธํ
let max = sum;
for(let i=len;i<word.length + len - 1;i++) {
let w;
// ์๋ก์ด ๊ฐ ๋ํ๊ธฐ
if(i >= word.length) {
w = word[i-word.length];
} else {
w = word[i];
}
sum += w === 'a' ? 1 : 0;
// ์ด์ ๊ฐ ๋นผ๊ธฐ
sum -= word[i-len] === 'a' ? 1 : 0;
if(sum > max) {
max = sum;
}
}
// (์ ์ฒด a์ ์ - ์ต๋ ์ฐ์์ = ์ต์ ์ด๋ ํ์)
console.log(len - max);