Algorithm/Baekjoon

[JavaScript/node.js] ๋ฐฑ์ค€ 1522๋ฒˆ - ๋ฌธ์ž์—ด ๊ตํ™˜

๊ฐœ๋ฐœ๊ฐœ๊ตด๐Ÿธ 2022. 8. 24. 17:45

[๋ฌธ์ œ]

https://www.acmicpc.net/problem/1522

 

1522๋ฒˆ: ๋ฌธ์ž์—ด ๊ตํ™˜

a์™€ b๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์งˆ ๋•Œ,  a๋ฅผ ๋ชจ๋‘ ์—ฐ์†์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ํ•„์š”ํ•œ ๊ตํ™˜์˜ ํšŒ์ˆ˜๋ฅผ ์ตœ์†Œ๋กœ ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์ด ๋ฌธ์ž์—ด์€ ์›ํ˜•์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ฒ˜์Œ๊ณผ ๋์€ ์„œ๋กœ ์ธ์ ‘ํ•ด

www.acmicpc.net

 

[ํ’€์ด]

  1. a๋ฅผ ๋ชจ๋‘ ์—ฐ์†์ ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„  ์šฐ์„  ๋ฌธ์ž์—ด์˜ ์ด a ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. a์˜ ์ด ๋ฌธ์ž ๊ฐœ์ˆ˜(len)์˜ ๊ตฌ๊ฐ„์œผ๋กœ ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ๋ฅผ ํ†ตํ•ด ๊ตฌ๊ฐ„์— ํฌํ•จ๋œ a์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.
  3. (์ด 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);