2003 ์ˆ˜๋“ค์˜ ํ•ฉ2๐Ÿ‘Š

Veloger_97ยท2021๋…„ 5์›” 19์ผ
0
post-thumbnail

๋ฌธ์ œ

N๊ฐœ์˜ ์ˆ˜๋กœ ๋œ ์ˆ˜์—ด A[1], A[2], โ€ฆ, A[N] ์ด ์žˆ๋‹ค. ์ด ์ˆ˜์—ด์˜ i๋ฒˆ์งธ ์ˆ˜๋ถ€ํ„ฐ j๋ฒˆ์งธ ์ˆ˜๊นŒ์ง€์˜ ํ•ฉ A[i] + A[i+1] + โ€ฆ + A[j-1] + A[j]๊ฐ€ M์ด ๋˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N(1 โ‰ค N โ‰ค 10,000), M(1 โ‰ค M โ‰ค 300,000,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ ์ค„์—๋Š” A[1], A[2], โ€ฆ, A[N]์ด ๊ณต๋ฐฑ์œผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. ๊ฐ๊ฐ์˜ A[x]๋Š” 30,000์„ ๋„˜์ง€ ์•Š๋Š” ์ž์—ฐ์ˆ˜์ด๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์ œ ์ž…๋ ฅ1

4 2
1 1 1 1

์˜ˆ์ œ ์ถœ๋ ฅ1

3

์˜ˆ์ œ ์ž…๋ ฅ2

10 5
1 2 3 4 2 5 3 1 1 2

์˜ˆ์ œ ์ถœ๋ ฅ2

3

์ฝ”๋“œ

โœ” ๊ตฌ๊ฐ„์˜ ๋ถ€๋ถ„ํ•ฉ์„ ์ด์šฉํ•˜๋Š” ๋ฌธ์ œ
ํˆฌ ํฌ์ธํ„ฐ๋Š” 1์ฐจ์› ๋ฐฐ์—ด์—์„œ ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜์—ฌ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
์กฐ๊ฑด์€ ๋ฐฐ์—ด์˜ ์›์†Œ๊ฐ€ ์ž์—ฐ์ˆ˜์—ฌ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
start, end๋ผ๋Š” ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ•ด์•ผํ•˜๋Š” ๊ฐ’๋ณด๋‹ค ๋ฐฐ์—ด์˜ ๋ถ€๋ถ„ํ•ฉ์ด ์ž‘์œผ๋ฉด mid๋ฅผ ํ•œ๊ฐ„ ์ด๋™ํ•˜์—ฌ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ๊ณ  ๋ฐ˜๋Œ€๋กœ ๋ถ€๋ถ„ํ•ฉ์ด ํฌ๋ฉด mid๋ฅผ ํ•œ๊ฐ„ ๋’ค๋กœ ์ด๋™ํ•˜์—ฌ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ธ๋‹ค.

const readline = require("readline");
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});
const numberSum = (limitArr, numArr) => {
  const sumArr = [10001];
  let sum = 0;
  let count = 0;
  let mid = 0;

  const numberArr = Number(limitArr[0]);
  const cutlineNum = Number(limitArr[1]);

  for (let i = 0; i < numberArr; i++) {
    sum += Number(numArr[i]);
    sumArr[i] = sum;
  }
  // unshift๋ฅผ ํ†ตํ•ด [0,1,2,3,4...] ๋ฐฐ์—ด๋กœ ๋งŒ๋“ ๋‹ค
  sumArr.unshift(0);

  for (let i = 0; i <= numberArr; i++) {
    // start์— ํฌ์ธํ„ฐ ํ•œ๊ฐœ, end์— ํฌ์ธํ„ฐ ํ•œ๊ฐœ ๋งŒ๋“ ๋‹ค.
    start = i;
    end = numberArr;

    // ์ค‘๊ฐ„์ง€์  mid๋ณด๋‹ค cutlineNum์ด ์ž‘๋‹ค๋ฉด start๋ฅผ ํ•œ์นธ ์•ž์œผ๋กœ,
    // cutlineNum์ด ํฌ๋‹ค๋ฉด end๋ฅผ ํ•œ์นธ ๋’ค๋กœ
    while (start <= end) {
      mid = parseInt((start + end) / 2);
      if (cutlineNum > sumArr[mid] - sumArr[i]) {
        start = mid + 1;
      } else if (cutlineNum < sumArr[mid] - sumArr[i]) {
        end = mid - 1;
      } else {
        count++;
        break;
      }
    }
  }
  console.log(count);
};

const inputArr = [];
rl.on("line", (userInput) => {
  inputArr.push(userInput);
}).on("close", () => {
  const limitArr = inputArr[0].split(" ");
  const numArr = inputArr[1].split(" ");
  numberSum(limitArr, numArr);
});
profile
ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ  ์‹ถ์–ด์š” ๐Ÿ™†โ€โ™‚๏ธ

0๊ฐœ์˜ ๋Œ“๊ธ€