[구름톤 챌린지 3주 차 학습 일기] 15일차 미션 문제 15. 과일 구매 (java)
Problem Solving/goorm

[구름톤 챌린지 3주 차 학습 일기] 15일차 미션 문제 15. 과일 구매 (java)

728x90

https://level.goorm.io/exam/195697/%EA%B3%BC%EC%9D%BC-%EA%B5%AC%EB%A7%A4/quiz/1

 

구름LEVEL

난이도별 다양한 문제를 해결함으로써 SW 역량을 향상시킬 수 있습니다.

level.goorm.io


728x90

 

내 생각

과일을 포만감 순으로 내림차순 정렬 후 구매할 수 있는 만큼 구매하는 방식으로 풀었다.


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

class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		
		// N, K 입력
		st = new StringTokenizer(br.readLine());
		int N = Integer.parseInt(st.nextToken());
		int K = Integer.parseInt(st.nextToken());
		
		// 과일 조각의 개수와 포만감을 담을 배열
		int[][] basket = new int[N][2]; // basket[i][0] := i번째 과일의 한 조각의 포만감, basket[i][1] := i번째 과일의 남은 조각 개수
		for(int i = 0; i < N; i++) {
			// 과일별 P, C 입력
			st = new StringTokenizer(br.readLine());
			int P = Integer.parseInt(st.nextToken());
			int C = Integer.parseInt(st.nextToken());
			basket[i][0] = C / P;
			basket[i][1] = P;
		}
		
		// 과일 바구니를 포만감 높은 순으로 정렬
		Arrays.sort(basket, (o1, o2) -> o2[0] - o1[0]);
		
		// 가지고 있는 돈만큼 과일 조각 구매
		long result = 0;
		for(int i = 0; i < N; i++) {
			if(basket[i][1] <= K) { // 남은 돈으로 현재 과일의 모든 조각을 살 수 있는 경우
				result += basket[i][0] * basket[i][1];
				K -= basket[i][1];
			}
			else { // 남은 돈으로 현재 과일의 모든 조각을 살 수 없는 경우
				result += basket[i][0] * K;
				break;
			}
		}
		
		// 답 출력
		System.out.println(result);
	}
}
728x90