[백준] 2473 세 용액 - javascript

Yongwoo Cho·2022년 5월 14일
0

알고리즘

목록 보기
91/104
post-thumbnail

📌 문제

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

📌 풀이

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "input.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\n");

const N = +input[0];
const nums = input[1]
  .split(" ")
  .map(Number)
  .sort((a, b) => a - b);
const ansArr = Array.from({ length: 3 }, () => 0);
let ans = Infinity;

for (let i = 0; i < N - 2; i++) {
  let left = i + 1;
  let right = N - 1;
  while (left < right) {
    const sum = nums[i] + nums[left] + nums[right];
    if (Math.abs(sum) < ans) {
      ans = Math.abs(sum);
      ansArr[0] = nums[i];
      ansArr[1] = nums[left];
      ansArr[2] = nums[right];
    }
    if (sum < 0) left++;
    else right--;
  }
}

console.log(ansArr.join(" "));

✔ 알고리즘 : 투포인터

✔ 두 용액에 이은 투포인터 문제이다. 용액 3개를 골라야 하므로 1개(index : i)는 고정시키고 i+1 ~ N-1 까지 구간에서 투포인터 알고리즘으로 순회하였다.

✔ 오름차순 정렬이므로 합이 0보다 작으면 left포인터 1증가(전체 값 증가)해주고 0보다 크면 right포인터를 1감소(전체 값 감소)해주었다.

✔ 난이도 : 백준 기준 골드 4

profile
Frontend 개발자입니다 😎

0개의 댓글