티스토리 뷰

728x90

문제를 보자마자 이건 greedy?! PriorityQueue?! 가 생각났지만..못풀었쥬?..

그래도..greedy를 생각해내서 뿌듯했다..많이 발전했다..

 

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️⃣ 정답코드

- 다른 사람의 코드를 참고해서 푼 나의 코드

 

import java.util.*;
import java.io.*;

class Jewelry implements Comparable<Jewelry>{
    public int weigh;
    public int price;

    public Jewelry(int weigh, int price) {
        this.weigh = weigh;
        this.price = price;
    }

    @Override //가격을 기준으로 내림차순을 할 수 있게 구현
    public int compareTo(Jewelry o) {
        return o.price - this.price;
    }
}
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int w = sc.nextInt(); //배낭무게
        int n = sc.nextInt(); //귀금속 종류
        PriorityQueue<Jewelry> pq = new PriorityQueue<Jewelry>();

        for (int i=0; i<n; i++) {
            int weight = sc.nextInt();
            int price = sc.nextInt();
            pq.offer(new Jewelry(weight, price));
        }

        sc.close();
        int result = 0;
        while(!pq.isEmpty()) {
            Jewelry j = pq.poll();
            if (w > j.weigh) { //배낭무게 > 주얼리의 무게
                result += j.weigh*j.price;
                w-= j.weigh; //배낭무게에서 주얼리 무게만큼을 빼주어서 다음 쥬얼리로 채워야 할 무게만 남긴다
            } else { 배낭무게 < //주얼리의 무게
                result += w*j.price;
                break;
            }
        }
        System.out.println(result);
    }
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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 29 30
글 보관함