나무 심기

marie·2024년 6월 11일
0

softeer

목록 보기
4/6
post-thumbnail

문제

남우는 나무를 2개 심으려고 합니다. 나무는 주어진 n개의 위치 중 서로 다른 두 곳에 꼭 심어야만 하며, 1번 위치부터 n번 위치까지 각 위치마다 토양의 비옥함에 해당하는 값 Fi가 주어졌을 때 남우는 나무가 심어지는 두 위치 a, b에서 토양의 비옥함의 곱인 Fa ∗ Fb가 최대가 되도록 나무를 심으려고 합니다. 남우가 적절한 위치에 나무를 심을 수 있도록 하는 프로그램을 작성해보세요.

만약 n이 3이고 다음과 같이 토양의 비옥함이 순서대로 5, -1, 4인 경우 5, 4 위치에 나무를 심으면 비옥함의 곱이 20으로 최대가 됩니다.

내 풀이

const readline = require('readline')
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
})

let array = [];
let sum = [];

rl.on('line', (input) => {
  array = input.split(" ").map((e) => +e);
})

rl.on('close', () => {
    if(array.length === 2) {
        console.log(array[0] * array[1]);
    } else {
        for(let i = 0; i < array.length - 1; i++) {
            for(let j = i + 1; j < array.length; j++) {
                sum.push(array[i] * array[j]);
            }
        }
        console.log(Math.max(...sum));
    }
  process.exit();
})

굉장히 비효율적인 코드같당....😥

다른 사람 풀이

비옥함을 담은 배열을 정렬한 후, 맨 앞 두 수의 곱과 맨 뒤 두 수의 곱을 비교하는 방식
훨씬 간결하다...👍🏻

const readline = require('readline')
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
})
let array = [];
let sum = []
rl.on('line', (input) => {
  array = input.split(" ").map((e) => +e);
})

rl.on('close', () => {
  const temp = array.sort((a, b) => a - b);
  const len = array.length; 
  console.log(Math.max(temp[0]*temp[1], temp[len-2]*temp[len-1]));
  process.exit();
})
profile
FE developer👩🏻‍💻

0개의 댓글