투케이2K

235. (java/자바) 알고리즘 : 예산 - for 문 , Arrays sort 배열 정렬 본문

Java

235. (java/자바) 알고리즘 : 예산 - for 문 , Arrays sort 배열 정렬

투케이2K 2021. 8. 21. 16:39

[개발 환경 설정]

개발 툴 : Eclipse

개발 언어 : Java


[소스 코드]

package ex;

import java.util.Arrays;

public class MainActivity3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("[Program Start]");
		System.out.println("");
		
		/**
		 * [예산]
		 * 1. S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다
		 * 2. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 없지만, 최대한 많은 부서의 물품을 구매해 줄 수 있도록 하려고 합니다
		 * 3. 부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원할 수 있는지 return 하세요
		 * 4. 입출력 예시
		 *    - 요청 예산 = [1,3,2,5,4] / 지원 가능 예산 = 9 / 지원 가능 부서 = 3
		 *    - 요청 예산 = [2,2,3,3] / 지원 가능 예산 = 10 / 지원 가능 부서 = 4
		 * 5. 프로그래머스 사이트 : https://programmers.co.kr/learn/courses/30/lessons/12982
		 * */
		
		// 초기 변수 선언 실시 [요청 배열]
		int d[] = {1,3,2,5,4}; // 1번
		//int d[] = {2,2,3,3}; // 2번
		
		// 초기 변수 선언 실시 [보유하고 있는 예산]
		int budget = 9; // 1번
		//int budget = 10; // 2번
		
		// 결과 확인 메소드 호출 실시
		System.out.println("결과 : " + solution(d, budget));
				
	}// 메인 종료
	
	public static int solution(int req[], int money) {
		// 결과를 반환할 변수 선언 실시
		int result = 0;
		
		// 인풋으로 들어온 데이터 확인 실시
		System.out.println("input [req] : " + Arrays.toString(req));
		System.out.println("input [money] : " + money);
		System.out.println("");
		
		// 로직 처리 실시
		/**
		 * [세부 설명]
		 * 1. 전체 예산에 맞게 예산 신청을 들어온 부서 값을 제외 시킵니다
		 * 2. 전체 예산 값은 0 미만으로 떨어 질 수 없습니다
		 * 3. 목표는 예산 금액에 맞게 최대한 많은 부서를 지원해주기 위해서 예산 요청 배열을 정렬해야합니다
		 * */		
		
		// 먼저 인풋으로 들어온 배열 오름차순 (작은 순서) 정렬 실시 : 최대한 많은 부서를 지원해주기 위함
		Arrays.sort(req);
		System.out.println("sort [req] : " + Arrays.toString(req));		
		System.out.println("");
		
		// for 반복문을 수행하면서 전체 예산에서 각 부서 요청 예산 빼기를 실시		
		for (int i=0; i<req.length; i++) {
			money -= req[i]; // 전체 예산에서 각 번지 값을 뺀다
			
			if(money < 0) break; // 더이상 지원할 예산이 없는 경우 break
			result ++; // 카운트 증가 실시
		}
		
		// 결과 반환 실시
		return result;
	}

}// 클래스 종료

[결과 출력]


[요약 설명]

/**

* [예산]

* 1. S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다

* 2. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 없지만, 최대한 많은 부서의 물품을 구매해 줄 수 있도록 하려고 합니다

* 3. 부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원할 수 있는지 return 하세요

* 4. 입출력 예시

* - 요청 예산 = [1,3,2,5,4] / 지원 가능 예산 = 9 / 지원 가능 부서 = 3

* - 요청 예산 = [2,2,3,3] / 지원 가능 예산 = 10 / 지원 가능 부서 = 4

* 5. 프로그래머스 사이트 : https://programmers.co.kr/learn/courses/30/lessons/12982

* */


 

반응형
Comments