이 영역을 누르면 첫 페이지로 이동
Nuhends 의 Tech Life 블로그의 첫 페이지로 이동

Nuhends 의 Tech Life

페이지 맨 위로 올라가기

Nuhends 의 Tech Life

IT / Tech / 재테크 관련 뉴스를 최대한 알기 쉽게 전달하는 Tech 블로그 입니다.

[Softeer] lv2. 금고털이 풀이 / Javascript

  • 2025.04.23 20:18
  • 프로그래밍/Algorithm
반응형

Softeer 금고털이

 

1. 문제

루팡은 배낭을 하나 메고 은행금고에 들어왔다. 금고 안에는 값비싼 금, 은, 백금 등의 귀금속 덩어리가 잔뜩 들어있다. 배낭은 W ㎏까지 담을 수 있다.

 

각 금속의 무게와 무게당 가격이 주어졌을 때 배낭을 채울 수 있는 가장 값비싼 가격은 얼마인가?

 

루팡은 전동톱을 가지고 있으며 귀금속은 톱으로 자르면 잘려진 부분의 무게만큼 가치를 가진다.

제약조건

1 ≤ N ≤ 106인 정수

1 ≤ W ≤ 104인 정수

1 ≤ Mi, Pi ≤ 104인 정수

입력형식

첫 번째 줄에 배낭의 무게 W와 귀금속의 종류 N이 주어진다. i + 1 (1 ≤ i ≤ N)번째 줄에는 i번째 금속의 무게 Mi와 무게당 가격 Pi가 주어진다.

출력형식

첫 번째 줄에 배낭에 담을 수 있는 가장 비싼 가격을 출력하라.

입력예제1

100 2 90 1 70 2

출력예제1

170

 

2. 언어별 시간 / 메모리

 

3. 풀이

고전적인 탐욕(Greedy) 문제 분할 가능 배낭 문제

 

처음 문제 풀이

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin', 'utf8');
const inputs = input.trim().split('\n');

const [first, ...args] = inputs;
let [w, n] = first.split(' ');
const items = args.map((v) => v.split(' ')).map(arr => [ Number(arr[0]), Number(arr[1]) ]).sort((a, b) => b[1] - a[1]);

let result = 0;
let index = 0;

while(true) {
    if (w <= 0 || index >= n) { 
        break; 
    }
    
    const item = items[index];

    if (w >= item[0]) {
        result += item[0] * item[1]
    } else {
        result += w * item[1]
    }

    w = w - item[0]
    index++;
}

console.log(result);

 

시간 복잡도: O(N logN)

 

하지만 메모리 256MB를 조과함.

이유는 최대 100만줄의 문자열 input을 처리하면서 발생. fs.readFileSync 방식 말고 readling 방식으로 처리하자.

 

관련 이슈 정리: https://nuhends.tistory.com/144

 

수정 후 풀이

const readline = require('readline');

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

let W = 0, N = 0;
const items = [];

rl.on('line', (line) => {
    // 첫번째 줄
    if (!W) {
        [W, N] = line.trim().split(' ').map(Number);
    } else {
        const [m, p] =line.trim().split(' ').map(Number);
        items.push([m, p]);

        if (items.length === N) {
            rl.close();
        }
    }
});

rl.on('close', () => {
    items.sort((a, b) => b[1] - a[1])

    let result = 0;

    for(let i=0; i<N && W > 0; i++) {
        const [m, p] = items[i];

        if (W >= m) {
            result += m * p;
            W -= m;
        } else {
            result += W * p;
            W = 0;
        }
    }

    console.log(result);
});
반응형
저작자표시 비영리 변경금지 (새창열림)

'프로그래밍 > Algorithm' 카테고리의 다른 글

[Softeer] lv2. 8단 변속기 / Javascript  (0) 2025.04.24
[Softeer] lv2. [21년 재직자 대회 예선] 전광판 / Javascript  (1) 2025.04.24
[Softeer] input값 읽기 Tip  (0) 2025.04.23
[Algorithm] 프로그래머스 > 이상한 문자 만들기  (3) 2020.12.30
[Algorithm] 프로그래머스 > 평균 구하기  (2) 2020.12.29

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [Softeer] lv2. 8단 변속기 / Javascript

    [Softeer] lv2. 8단 변속기 / Javascript

    2025.04.24
  • [Softeer] lv2. [21년 재직자 대회 예선] 전광판 / Javascript

    [Softeer] lv2. [21년 재직자 대회 예선] 전광판 / Javascript

    2025.04.24
  • [Softeer] input값 읽기 Tip

    [Softeer] input값 읽기 Tip

    2025.04.23
  • [Algorithm] 프로그래머스 > 이상한 문자 만들기

    [Algorithm] 프로그래머스 > 이상한 문자 만들기

    2020.12.30
다른 글 더 둘러보기

정보

Nuhends 의 Tech Life 블로그의 첫 페이지로 이동

Nuhends 의 Tech Life

  • Nuhends 의 Tech Life의 첫 페이지로 이동
반응형

검색

메뉴

  • 홈
  • 웹 개발
  • 경제 데이터
  • 경제 공부
  • 방명록

카테고리

  • 분류 전체보기 (127)
    • 프로그래밍 (69)
      • React (3)
      • HTML&CSS 사전 (13)
      • JAVASCRIPT 사전 (11)
      • Algorithm (23)
      • 이슈 정리 (2)
      • 개발 환경 (4)
      • NodeJS (1)
      • Typescript (4)
      • NextJS (5)
      • React-Query (2)
      • 인프라 (0)
      • ai (1)
    • 경제 데이터 (22)
      • 주식 순위 (20)
      • 경제지표 (2)
    • 경제 공부 (25)
      • 경제 신문 읽기 (3)
      • 세금 재테크 (7)
      • 인사이트 (4)
      • 경제용어정리 (9)
      • 정부 지원 제도 관련 (2)
    • 팁 모음 (11)
      • 인터넷 (5)
      • 생활 (3)
      • SNS 맛집 (3)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 코테
  • 알고리즘
  • 코테 풀이
  • 자바스크립트
  • 코딩테스트
  • javascript
  • 프로그래머스
  • softeer

나의 외부 링크

정보

nuhends의 Nuhends 의 Tech Life

Nuhends 의 Tech Life

nuhends

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © nuhends. Designed by Fraccino.

티스토리툴바