알맹이방
[프로그래머스] 예산 - java 본문
import java.util.Collections;
import java.util.ArrayList;
import java.util.List;
class Solution {
public int solution(int[] budgets, int M) {
int answer = 0;
int max = 0;
for (int i = 0; i < budgets.length; i++) {
max = Math.max(budgets[i], max);
}
int first = 0;
int end = max;
while(true){
long result=0;
if(first>end){
break;
}
int middle = (first+end)/2;
for(int i = 0 ; i<budgets.length; i++){
if(budgets[i]>middle){
result+=middle;
}
else{
result+=budgets[i];
}
}
if(result>M){
end=middle-1;
}
else{
first=middle+1;
answer = Math.max(answer, middle);
}
}
return answer;
}
}
<사고과정>
import java.util.Collections;
import java.util.ArrayList;
import java.util.List;
class Solution {
public int solution(int[] budgets, int M) {
int answer = 0;
int sum=0;
for(int i =0; i<budgets.length; i++){ //처음의 예산 총 합
sum+=budgets[i];
}
if(sum<M){//예산 총 합이 국가예산 보다 작을 때 상한액은 요청된 예산의 최댓값
int max =0 ;
for(int i =0; i<budgets.length; i++){
if(max<budgets[i]){
max=budgets[i];
}
}
answer=max;
}
else{ //요청된 예산 총 합이 국가예산보다 클 때 상한액을 찾아감
List<Integer> list = new ArrayList<Integer>();
for(int i =0; i<budgets.length; i++){
list.add(budgets[i]);
}
Collections.sort(list);//list sort
int first = list.get(1);
int end = list.get(list.size()-1);
while(true){
int result=0;
if(first>end){
break;
}
int middle = (first+end)/2;
for(int i = 0 ; i<list.size(); i++){
if(list.get(i)>middle){
result+=middle;
}
else{
result+=list.get(i);
}
}
if(result>M){
end=middle-1;
}
else{
first=middle+1;
answer=middle;
}
}
}
return answer;
}
}
import java.util.Collections;
import java.util.ArrayList;
import java.util.List;
class Solution {
public int solution(int[] budgets, int M) {
int answer = 0;
int sum=0;
for(int i =0; i<budgets.length; i++){ //처음의 예산 총 합
sum+=budgets[i];
}
if(sum<M){//예산 총 합이 국가예산 보다 작을 때 상한액은 요청된 예산의 최댓값
int max =0 ;
for(int i =0; i<budgets.length; i++){
if(max<budgets[i]){
max=budgets[i];
}
}
answer=max;
}
else{ //요청된 예산 총 합이 국가예산보다 클 때 상한액을 찾아감
List<Integer> list = new ArrayList<Integer>();
for(int i =0; i<budgets.length; i++){
list.add(budgets[i]);
}
Collections.sort(list);//list sort
int first = list.get(1);
int end = list.get(list.size()-1);
while(true){
int result=0;
if(first>end){
break;
}
int middle = (first+end)/2;
for(int i = 0 ; i<list.size(); i++){
if(list.get(i)>middle){
result+=middle;
}
else{
result+=list.get(i);
}
}
System.out.println("result : "+result);
if(result>M){
}
else{
}
}
}
return answer;
}
}
import java.util.Collections;
import java.util.ArrayList;
import java.util.List;
class Solution {
public int solution(int[] budgets, int M) {
int answer = 0;
int sum=0;
for(int i =0; i<budgets.length; i++){ //처음의 예산 총 합
sum+=budgets[i];
}
if(sum<M){//예산 총 합이 국가예산 보다 작을 때 상한액은 요청된 예산의 최댓값
int max =0 ;
for(int i =0; i<budgets.length; i++){
if(max<budgets[i]){
max=budgets[i];
}
}
answer=max;
}
else{ //요청된 예산 총 합이 국가예산보다 클 때 상한액을 찾아감
List<Integer> list = new ArrayList<Integer>();
for(int i =0; i<budgets.length; i++){
list.add(budgets[i]);
}
Collections.sort(list);//list sort
int middle = (list.get(1)+list.get(list.size()-1))/2;
while(true){
int result;
for(int i = 0 ; i<list.size(); i++){
if(list.get(i)>middle){
result+=middle;
}
else{
result+=list.get(i);
}
}
if(result>M){
middle--;
}
}
}
return answer;
}
}
class Solution {
public int solution(int[] budgets, int M) {
int answer = 0;
int sum=0;
for(int i =0; i<budgets.length; i++){ //처음의 예산 총 합
sum+=budgets[i];
}
if(sum<M){//예산 총 합이 최대치보다 작을 때 max 값은 요청된 예산의 최댓값
int max =0 ;
for(int i =0; i<budgets.length; i++){
if(max<budgets[i]){
max=budgets[i];
}
}
answer=max;
}
else{
}
return answer;
}
}
'알고리즘 > [2020] 프로그래머스' 카테고리의 다른 글
[프로그래머스] 단속카메라 - java (0) | 2020.07.17 |
---|---|
[프로그래머스] 2 x n 타일링 - java (0) | 2020.06.06 |
[프로그래머스] 네트워크 - java (0) | 2020.06.02 |
[프로그래머스] Summer/Winter Coding(2019) 종이접기 - java (0) | 2020.05.26 |
[프로그래머스] H-Index - java (문제 해설 포함) (0) | 2020.05.19 |
Comments