공부블로그
[프로그래머스] 예산 본문
https://school.programmers.co.kr/learn/courses/30/lessons/12982#qna
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
1. 예산 안에서 지원해줄 수 있는 부서의 최대수
2. 주의) 예산 남는 금액은 상관없음.
코드 설명
1. 예산 남는 금액을 최대로 만들면 많은 부서에 지원가능
d 오름차순으로 정렬 > 순서대로 예산에서 빼준다
예산이 음수가 되면 반복문을 나간다.
import java.util.Arrays;
class Solution {
public int solution(int[] d, int budget) {
int answer = 0;
Arrays.sort(d);
for(int i: d){
budget -= i;
if(budget<0) break;
else answer++;
}
return answer;
}
}
재귀버전
코드 해석
1. 최대 부서 수(==예산에서 배열 요소를 뺀 횟수) =
예산에서 배열 첫번째 요소를 뺀 횟수 + 첫번째 요소를 제외한 나머지 범위에서 뺀 횟수
2. base case: 1. 예산이 음수가 되면 0을 반환한다. 2. 예산 양수, 배열의 인덱스 idx가 d.length-1되면 1을 반환한다.
import java.util.Arrays;
class Solution {
static int Re(int budget, int[] d, int idx){
budget -= d[idx];
if(budget < 0) return 0;
else if(idx == d.length-1) return 1;
else {
int n = 1 + Re(budget, d, idx+1);
return n;
}
}
public int solution(int[] d, int budget) {
Arrays.sort(d);
return Re(budget, d, 0);
}
}
'IT > 알고리즘' 카테고리의 다른 글
[프로그래머스] 행렬의 덧셈 (0) | 2022.07.25 |
---|---|
N Queen문제 (0) | 2022.07.25 |
[프로그래머스] 신규 아이디 추천 (0) | 2022.07.15 |
[프로그래머스] 숫자 문자열과 영단어 (0) | 2022.07.08 |
[프로그래머스] 1차 비밀지도 (0) | 2022.07.07 |
Comments