Algorithm
[백준] 20115번: 에너지 드링크 - Node.js (자바스크립트)
sqsung
2023. 6. 13. 12:46
1. 문제 ㅡ 20115번: 에너지 드링크 (난이도: Silver III)
20115번: 에너지 드링크
페인은 에너지 드링크를 좋아하는 회사원이다. 에너지 드링크는 카페인, 아르기닌, 타우린, 나이아신 등의 성분이 들어있어 피로 회복에 도움을 주는 에너지 보충 음료수이다. 야근을 마치고 한
www.acmicpc.net
2. 풀이 ㅡ Node.js (자바스크립트)
const [, input] = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const drinks = input
.split(' ')
.map(val => +val)
.sort((a, b) => a - b);
const getMaxEnergy = () => {
// drinks 배열에 하나의 음료수만 남을 때까지
while (drinks.length > 1) {
// drinks 배열은 정렬되어 있기 때문에 제일 마지막 값이 제일 큰 값이다
const bigger = drinks.pop();
const smaller = drinks.pop();
// 더 작은 음료수의 반을 흘린고, 더 큰 음료수와 합친 후 drinks 배열에 넣어준다
const combined = bigger + smaller * 0.5;
drinks.push(combined);
}
return drinks[0];
};
console.log(getMaxEnergy());
2-1. 풀이 설명
음료수가 한 개 남을 때까지 두 개의 음료수를 합치는데, 이때 한 음료의 반절은 흘리게 된다. 마지막 음료수가 될 수 있는 최댓값을 찾는 그리디 알고리즘 유형의 문제다.
최대로 누적될 수 있는 값을 찾기 위해서는 음료수들을 오름차순으로 정렬해두고 시작해야 한다. 이후 음료수 배열에 하나의 값만 남을 때까지 아래 과정(1 ~ 3)을 반복하면 된다.
1. 배열에서 두 개의 음료수를 꺼낸다 (pop)
2. 더 작은 값의 반절을 더 큰 값과 더한다
3. 합쳐진 값을 배열에 다시 넣어준다 (push)
반복문이 끝난 후 배열에 남아있는 유일 값을 출력하면 된다.