기술 블로그

예산 본문

알고리즘 문제/Programmers

예산

parkit 2020. 6. 24. 01:31
728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/43237



budgets를 Vector에 넣어주고, Vector를 정렬해주는 방식(Collections.sort())으로 구현했다가 효율성에서 시간 초과가 발생했다.


그래서, 그냥 Arrays.sort()를 사용했다.






1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import java.io.*;
import java.util.*;
 
public class Solution {
 
    static BufferedReader br;
    static BufferedWriter bw;
 
    static boolean chk(int[] budgets, int M, int mid)
    {
        int sum = 0, len = budgets.length;
        
        for(int i=0; i<len; i++) {
            if(budgets[i] > mid) {
                sum += mid;
            }
            else {
                sum += budgets[i];
            }
        }
        
        return sum <= M;
    }
    
    static int solution(int[] budgets, int M) {
        int answer = 0, len = budgets.length, sum = 0, Left = 0, Right = 0;
        
        Arrays.sort(budgets);
        Right = budgets[len - 1];
                
        while(Left <= Right) {
            int mid = (Left + Right) >> 1;
        
            if(chk(budgets, M, mid)) {
                answer = Math.max(answer, mid);
                Left = mid + 1;
            }
            else {
                Right = mid - 1;
            }
        }
        
        return answer;
    }
    
    public static void main(String[] args) throws IOException  {
        // TODO Auto-generated method stub
        br = new BufferedReader(new InputStreamReader(System.in));
        bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;
        //st = new StringTokenizer(br.readLine());
 
        int[] budgets = { 120110140150 };
        int M = 485;
        
        System.out.println(solution(budgets, M));
            
        bw.write("\n");
        bw.flush();
        bw.close();
    }
}
 
class pair {
    int first, second;
    pair(int a, int b) {
        this.first = a;
        this.second = b;
    }
}
 
class tuple {
    int first, second, third;
    tuple(int a, int b, int c) {
        this.first = a;
        this.second = b;
        this.third = c;
    }
}
 
class PQ implements Comparable<PQ> {
    int first, second;
    
    PQ(int f, int s) {
        this.first = f;
        this.second = s;
    }
    
    public int compareTo(PQ p) {
        if(this.first < p.first) {
            return -1// 오름차순
        }
        else if(this.first == p.first) {
            if(this.second < p.second) {
                return -1;
            }
        }
        
        return 1
        // 이미 this.first가 더 큰 것이 됐으므로, 1로 해준다.
        // -1로 하면 결과가 이상하게 출력됨.
    }
}
cs


728x90
반응형

'알고리즘 문제 > Programmers' 카테고리의 다른 글

베스트앨범  (0) 2020.06.24
셔틀버스  (0) 2020.06.24
N으로 표현  (0) 2020.06.24
외벽 점검  (0) 2020.04.03
블록 이동하기  (0) 2020.04.01