요즘 자꾸 문제를 큐로 풀고 있다.
큐의 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;
}
}
'코딩 테스트' 카테고리의 다른 글
(Java) 문자열 p와 y의 개수 (0) | 2021.11.13 |
---|---|
(Java) 프로그래머스 2016 (0) | 2021.11.13 |
(Java) 프로그래머스 최소직사각형 (0) | 2021.11.12 |
(Java) 프로그래머스 나머지가 1이 되는 수 찾기 (0) | 2021.11.11 |
(Java) 프로그래머스 비밀지도 (0) | 2021.11.10 |