예산

SSO·2022년 1월 30일
0

Coding Test & Algorithm

목록 보기
4/17
post-thumbnail

문제 설명

  • 정해진 예산이 있고 부서별로 신청한 금액을 지원해 줄 수 있다.
  • 신청받은 금액보다 적게는 지원할 수 없다. Ex. 3원을 신청했는데 2원을 지원해주는 건 불가능.
  • 최대한 많은 부서에게 지원을 해주려고 한다.
  • d는 부서별로 신청한 금액이 들어있는 배열이며, 길이(전체 부서의 개수)는 1 이상 100 이하입니다.
  • d의 각 원소는 부서별로 신청한 금액을 나타내며, 부서별 신청 금액은 1 이상 100,000 이하의 자연수입니다.
  • budget은 예산을 나타내며, 1 이상 10,000,000 이하의 자연수입니다.

입출력 예시

→ 입출력 예시 1번의 경우, 예산이 최대 9원이기 때문에 4개 이상의 부서에 지원을 할 경우 무조건 9원이 넘어가게 된다. 따라서 이 경우의 최대 지원할 수 있는 부서의 개수는 3개이다.


정답 코드

import java.util.Arrays;

class Solution {
    public int solution(int[] d, int budget) {
        int answer = 0;
        int compare = 0;
        Arrays.sort(d); // 작은 금액 순으로 정렬

        for(int i = 0; i < d.length; i++){
            if(compare + d[i] <= budget){
                answer++;
                compare += d[i];
            }
        }
        return answer;
    }
}

코드 설명

우선 생각나는 대로 써봤는데 한번에 풀어서 기분이 너무너무 좋았다:)

생각한 내용

작은 금액을 많이 지원해주는 것이 최대로 지원할 수 있을 것이다.

⇒ 그러니까 신청 금액이 들어있는 배열 d를 정렬을 하면서 시작을 했다.

예산과 비교를 위한 변수가 필요하다.

⇒ compare 이라는 변수를 두고 지원하기로 결정한 금액을 더해가면서 가진 예산과 비교를 하자!

⇒ compare은 지원하기로 결정한 금액을 담고 있는 변수

⇒ 따라서 compare + d[i]가 예산보다 크다면 d[i]는 지원할 수 없게 되므로 for문이 끝나게 되고 answer을 리턴하게 된다.

⇒ 예산보다 작다면 answer++ 해주고 compare에 지원하기로 결정된 d[i] 금액을 더해준다.

이렇게 한 번에 푼게 처음이라 그런지 실력이 늘고 있는거 같은 자신감이 뿜뿜한다,,💛

profile
👩🏻‍💻👊🏻⭐️

0개의 댓글