코딩 테스트

(Java) 프로그래머스 예산

로승리 2021. 11. 13. 06:25

요즘 자꾸 문제를 큐로 풀고 있다.

큐의 poll과 peek을 이용해서 신청금액을 적은 숫자부터 더하다가 다음 숫자를 더했을 때 금액이 예산 이상이면

그만두게 해야겠다 라고 생각해서 큐를 사용했는데

다른분들의 코드를 보니 너무 간단하게 풀어서 살짝 허무했다....

하나의 문제도 최소 2가지 방법을 생각해서 풀어봐야겠다.


최종 코드

import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
class Solution {
    public int solution(int[] d, int budget) {
        int answer = 0;
        // 큐에 넣기전에 정렬
        Arrays.sort(d);
        Queue<Integer> qu = new LinkedList<>();

        // d의 원소 큐에 넣기
        for (int i : d) {
            qu.add(i);
        }

        // 신청금액을 더하기 위한 변수
        int num = 0;
        // 신청금액의 합이 예산을 넘지 않으면서 큐가 비어 있지 않을때까지
        while (!(num >= budget) && !(qu.isEmpty())) {
            // 지금까지의 합과 다음 신청금액의 합이 예산을 넘지 않으면
            if(num + qu.peek() <= budget) {
                num += qu.poll();
                answer++;
            }
            else break;
        }
        return answer;
    }
}

 

다른 분 코드

import java.util.*;

class Solution {
  public int solution(int[] d, int budget) {
      int answer = 0;

        Arrays.sort(d);

        for (int i = 0; i < d.length; i++) {
            budget -= d[i];

            if (budget < 0) break;

            answer++;
        }

        return answer;
  }
}