b1202. 보석도둑

2024. 11. 4. 13:31·Algorithm & Data Structures/BOJ

https://www.acmicpc.net/problem/1202

 

 

보석의 무게와 가치, 가방의 용량이 주어졌을 때 가방에 단하나의

보석이 들어간다고 가정한다면 입력에 따라 최대 얼마만큼의 가치를 담을수

있는지 구하는 문제였다.

 

우선 보석의 무게와 가치를 저장하고 무게에 따라 그리고 가치에 따라 정렬해야할

필요성을 느꼈다. 그리하여 jewelry라는 class를 만들고 그 자료형으로 array를 만들었다.

 

이후 무게를 기준으로 오름차순으로 정렬하되 무게가 같다면 가치가 높은 순서대로

내림차순 정렬하도록 하였다.

 

이후 가방의 용량을 input[] array에 입력받고 오름차순 정렬한 후

priority queue를 활용하여 낮은 무게부터 확인해가며 보석을 모두 집어넣기 시작했다.

 

이후 가방의 용량을 하나씩 올릴때마다 pq에서 하나씩 빼며 answer에 값을 더하였고

최종 무게가 answer였으므로 출력하여 문제를 해결하였다.

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    private static Jewelry[] j;
    private static int[] input;
    private static class Jewelry{
        int cost;
        int price;
        public Jewelry(int cost, int price){
            this.cost = cost;
            this.price = price;
        }
    }
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());
        j = new Jewelry[N];
        input = new int[K];
        long answer = 0;
        for(int i = 0 ; i < N ; i++){
            st = new StringTokenizer(br.readLine());
            j[i] = new Jewelry(Integer.parseInt(st.nextToken()),Integer.parseInt(st.nextToken()));
        }
        Arrays.sort(j,(o1,o2)->{
            if(o2.cost == o1.cost)
                return o2.price - o1.price;
            return o1.cost-o2.cost;
        });
        for(int i = 0 ; i < K ; i++ ){
            input[i] = Integer.parseInt(br.readLine());
        }
        Arrays.sort(input);
        PriorityQueue<Integer> pq = new PriorityQueue<>(Comparator.reverseOrder());
        for(int i = 0, l = 0; i < K ; i++){
            while(l < N && j[l].cost<=input[i]){
                pq.offer(j[l++].price);
            }
            if(!pq.isEmpty()){
                answer += pq.poll();
            }
        }
        System.out.println(answer);
    }
}

'Algorithm & Data Structures > BOJ' 카테고리의 다른 글

b1644 소수의 연속합  (0) 2024.11.08
b1509. 펠린드롬 분할  (0) 2024.11.06
b1197. 최소 스패닝 트리  (0) 2024.10.31
b1005. ACMcraft  (0) 2024.10.29
b28702, b30804  (0) 2024.10.10
'Algorithm & Data Structures/BOJ' 카테고리의 다른 글
  • b1644 소수의 연속합
  • b1509. 펠린드롬 분할
  • b1197. 최소 스패닝 트리
  • b1005. ACMcraft
Geisha
Geisha
개발 일기
  • Geisha
    Geisha
    Geisha
  • 전체
    오늘
    어제
    • 분류 전체보기 (331) N
      • Algorithm & Data Structures (249)
        • BOJ (107)
        • SWEA (1)
        • Programers (137)
        • Data Structures (3)
      • DB (29) N
        • SQL (23) N
        • RDBMS (2)
      • Java (1)
        • Class (1)
      • Spring (5)
        • Spring MVC (1)
        • Annotations (1)
      • CS (36)
        • 운영체제 (13)
        • 네트워크 (5)
      • Tool (6)
        • Git (5)
        • AWS (1)
      • Project (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준
    후위순회
    Stack
    이분탐색
    골드
    전위순회
    경로압축
    programmers
    algorithm
    자바
    baekjoon
    백트래킹
    PriorityQueue
    Union-Find
    binarySearch
    SQL
    Dijkstra
    스택
    Java
    유니온파인드
    BFS
    DynamicProgramming
    알고리즘
    구현
    동적계획법
    dp
    dfs
    투포인터
    프로그래머스
    다익스트라
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Geisha
b1202. 보석도둑
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.