정현수
현수 세상
정현수
전체 방문자
오늘
어제
반응형
  • 분류 전체보기 (267)
    • NEXTSTEP 자바스크립트 클린코드 2기 (1)
    • 우테코 4기 (6)
    • 회고록 (5)
    • 개발지식 (6)
    • React (3)
      • React Clone Coding (3)
    • React Native (2)
    • Kubernetes & Docker (36)
      • 궁금한 것 (13)
    • Flutter (2)
    • 알고리즘 (168)
      • 프로그래머스 1단계 (27)
      • 프로그래머스 2단계 (37)
      • 백준 (98)
      • 이론 (6)
    • 자료구조 (3)
    • 유튜브 (1)
    • 책 읽자 (1)
    • 취업준비 (1)
    • 대내 활동 (31)
      • 2022년 겨울방학 알고리즘 특강 (0)
      • 2020년 여름방학 모각코 (13)
      • 2020년 겨울방학 모각코 (13)
      • 웹프로그래밍 상상튜터링 (5)

인기 글

최근 글

공지사항

  • 블로그 이동

태그

  • 자바스크립트
  • 노드
  • 모각코
  • flutter
  • 쿠버네티스
  • 알고리즘
  • Kubernetes
  • replicaset
  • 공식문서
  • 백준
  • Deployment
  • 개발지식
  • React
  • 그리디
  • NodePort
  • javascript
  • Jenkins
  • 이코테
  • docker
  • image pull
  • 디플로이먼트
  • kubelet
  • 파이썬
  • 우테코
  • mysql
  • 프로그래머스
  • 레플리카셋
  • image run
  • 리액트
  • programmers

최근 댓글

블로그 메뉴

  • 홈

티스토리

hELLO · Designed By 정상우.
정현수

현수 세상

[백준] 20115번: 에너지 드링크 (JavaScript, NodeJS)
알고리즘/백준

[백준] 20115번: 에너지 드링크 (JavaScript, NodeJS)

2022. 1. 20. 16:25
반응형

문제

페인은 에너지 드링크를 좋아하는 회사원이다. 에너지 드링크는 카페인, 아르기닌, 타우린, 나이아신 등의 성분이 들어있어 피로 회복에 도움을 주는 에너지 보충 음료수이다.

야근을 마치고 한밤중에 퇴근하니 벌써 새벽 1시. 하지만 주말은 아직 멀었고, 다음 날에도 정시에 출근해야 하는 페인은 오늘도 에너지 드링크를 찾는다.

반복되는 야근에 지친 나머지, 평소보다 더 많은 에너지와 피로 회복이 필요했던 페인은 집에 있던 에너지 드링크들을 한 데 합쳐서, 하나의 에너지 드링크로 만들어 한번에 마시려 한다.

페인이 에너지 드링크들을 합치는 과정은 다음과 같다.

  1. 임의의 서로 다른 두 에너지 드링크를 고른다.
  2. 한쪽 에너지 드링크를 다른 쪽 에너지 드링크에 모두 붓는다. 단, 페인은 야근 후유증으로 인해 손이 떨려, 붓는 과정에서 원래 양의 절반을 바닥에 흘리게 된다.
  3. 다 붓고 남은 빈 에너지 드링크는 버린다.
  4. 1~3 과정을 에너지 드링크가 하나만 남을 때까지 반복한다.

예를 들어, 두 에너지 드링크 a, b가 있고, 양이 각각 xa, xb라 할 때, 다음 둘 중 하나의 선택을 할 수 있다.

  • a의 양을 xa + (xb / 2)로 만들고, b를 버리기
  • b의 양을 xb + (xa / 2)로 만들고, a를 버리기

페인은 합쳐진 에너지 드링크의 양을 최대로 하려 한다. 불쌍한 페인을 도와주자!

입력

첫째 줄에 페인이 가지고 있는 에너지 드링크의 수 N이 주어진다. (2 ≤ N ≤ 105)

둘째 줄에 각 에너지 드링크의 양이 공백으로 구분되어 주어진다. i번째 정수 xi (1 ≤ xi ≤ 109)는 에너지 드링크 i의 양이 xi임을 의미한다.

출력

첫째 줄에 페인이 최대로 만들 수 있는 에너지 드링크의 양을 출력한다.

절대/상대 오차는 10-5까지 허용한다.

예제 입력 1 복사

5
3 2 10 9 6

예제 출력 1 복사

20

예제 입력 2 복사

10
100 9 77 65 39 27 45 1 80 495

예제 출력 2 복사

716.5

정답 풀이

const path = process.platform === "linux" ? "/dev/stdin" : "input.txt"; // 리눅스로 테스트할 땐 따로 설정해주어야 합니다.
const input = require("fs").readFileSync(path).toString().trim().split("\n");

let [n, ...drinks] = input;
n = +n;
drinks = drinks[0].split(' ').map(i => Number(i));

// 문제 풀이
function solution(n, drinks) {
	drinks.sort((a, b) => a - b);

	for (let i = 0; i < n - 1; i += 1) {
		const larger = drinks.pop();
		drinks.push(larger + (drinks.pop() / 2));
	}

	return drinks[0];
}

// 제출
const answer = solution(n, drinks);
console.log(answer);
⭐ 문제 핵심 아이디어 ⭐
1. 그리디
2. 제일 큰 값 두 개중에 작은 것을 반으로 나눠서 큰 것에 넣음.

 

반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 20365번: 블로그2 (JavaScript, NodeJS)  (0) 2022.01.21
[백준] 20300번: 서강근육맨 (JavaScript, NodeJS)  (0) 2022.01.20
[백준] 11508번: 2+1 세일 (JavaScript, NodeJS)  (0) 2022.01.19
[백준] 1758번: 알바생 강호 (JavaScript, NodeJS)  (0) 2022.01.19
[백준] 1343번: 폴리오미노 (JavaScript, NodeJS)  (0) 2022.01.19
    정현수
    정현수
    깃허브 : https://github.com/junghyeonsu 개인 블로그 : https://junghyeonsu.com/ (양질의 글을 올리려고 항상 노력합니다.)

    티스토리툴바