백준 2467 nodejs

윤익·2022년 11월 2일
0

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

// 이분 탐색 활용한 풀이
const fs = require('fs')
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n')
const N = +input[0]
const A = input[1].split(' ').map(Number)
let [i, j, min, output] = [0, N - 1, Infinity, '']
while (i < j) {
  const sum = A[i] + A[j]
  if (Math.abs(sum) < min) {
    min = Math.abs(sum)
    output = `${A[i]} ${A[j]}`
  }
  sum < 0 ? i++ : j--
}
console.log(output)
// 기존 풀이
const fs = require('fs')
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n')
const N = +input[0]
const A = input[1].split(' ').map(Number)
let j = A.findIndex(e => e >= 0)
// 첫번째 산성의 index j
let [i, M] = [j >= 0 ? j - 1 : N - 1, []]
// 마지막 알칼리성 idnex i
const abs = (A, a, b) => Math.abs(A[a] + A[b])
const subMin = [abs(A, i - 1, i), abs(A, i, j), abs(A, j, j + 1)]
const min = Math.min(...subMin.filter(e => e))
M =
  min == subMin[0]
    ? [A[i - 1], A[i]]
    : min == subMin[1]
    ? [A[i], A[j]]
    : [A[j], A[j + 1]]
// 혼합 용액 [i-1,i], [i,j], [j,j-1] 중 최솟값 
while (i >= 0 && j >= 0 && j < N) {
  while (abs(A, i - 1, j) < abs(A, i, j)) i--
  if (abs(A, i, j) < abs(M, 0, 1)) M = [A[i], A[j]]
  j++
}
// 산성 용액 j에 대해 절댓값이 가장 작은 i 값을 찾아 기존 M과 비교
console.log(M.join(' '))

profile
https://nickyoon.tistory.com/ 기술 블로그 이전

0개의 댓글