๐ŸŽฒ ๋ฐฑ์ค€ 3151๋ฒˆ ํ•ฉ์ด 0

Jeongeunยท2023๋…„ 11์›” 30์ผ
0

๋ฐฑ์ค€

๋ชฉ๋ก ๋ณด๊ธฐ
138/186

๋ฐฑ์ค€ 3151๋ฒˆ

๐Ÿงธ number ์„ค์ • ๋ถ€๋ถ„์„ ๋นผ๊ณ  ์ฝ”๋“œ๋ฅผ ๋Œ๋ ค์„œ ๋Ÿฐํƒ€์ž„์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”๋ฐ ๋’ค๋Š”๊ฒŒ ์•Œ์•„์ฐจ๋ ธ๋‹ค...ํ•˜..
๐Ÿงธ ์ด๋ถ„ํƒ์ƒ‰ ๋ฌธ์ œ๋ฅผ ์ข€ ๋” ํ’€์–ด๋ด์•ผ๊ฒ ๋‹ค.
๐Ÿ’Š ํ•ฉ๊ณ„๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ์‹ ๊ฒฝ์จ์•ผํ•œ๋‹ค.
๐ŸŽจ ์ฐธ๊ณ  ์ฝ”๋“œ

const fs = require('fs'); 
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
const N = +input.shift();
const number = input[0]
  .split(" ")
  .map(Number)
  .sort((a, b) => a - b);

let answer = 0;

for (let i = 0; i <=N-3 ; i++) {
  const target = number[i];
  if(target>0) break;
  let left = i + 1;
  let right = N - 1;
  
  while (left < right) {
    const sum = target + number[left] + number[right];
    if (sum === 0) {
      if (number[left] === number[right]) {
        answer += ((right - left + 1) * (right - left)) / 2;
        break;
      }
      let leftCount = 1;
      let rightCount = 1;
      while (number[left] === number[left + 1]) {
        leftCount++;
        left++;
      }
      while (number[right] === number[right - 1]) {
        rightCount++;
        right--;
      }
      answer += leftCount * rightCount;
    }
    if (sum < 0) left++;
    else  right--;
  }
}

console.log(answer);

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