| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- javascript
- 17626번
- 1541번
- 1969번
- 맥주마시면서걸어가기
- 1926번
- 타입스크립트 프로그래밍
- node.js
- 7526번
- 2503번
- 20365번
- 타입스크립트
- 14940번
- 자바스크립트
- 2422번
- 풀이
- 6593번
- 20300번
- 16953번
- 5014번
- 나이트의이동
- 13913번
- 5427번
- 123만들기
- 한윤정이 이탈리아에 가서 아이스크림을 사먹는데
- 정리
- 16439번
- 토마토
- 백준
- 알고리즘
Archives
- Today
- Total
Sqsung DevLog
[백준] 20115번: 에너지 드링크 - Node.js (자바스크립트) 본문
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)
반복문이 끝난 후 배열에 남아있는 유일 값을 출력하면 된다.
'Algorithm' 카테고리의 다른 글
| [백준] 9205번: 맥주 마시면서 걸어가기 - Node.js (자바스크립트) (0) | 2023.06.14 |
|---|---|
| [백준] 13305번: 주유소 - Node.js (자바스크립트) (0) | 2023.06.13 |
| [백준] 20300번: 서강근육맨 - Node.js (자바스크립트) (0) | 2023.06.09 |
| [백준] 2422번: 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 - Node.js (자바스크립트) (1) | 2023.06.08 |
| [백준] 16439번: 치킨치킨치킨 - Node.js (자바스크립트) (2) | 2023.06.06 |