본문 바로가기

백준

6236 용돈관리 (미완)

이렇게 생각했고

 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
using i64 = long long;

bool check(i64 mid, int k, vector<int> v){
    i64 c = 0;
    i64 m = mid;
    for(int i = 0; i < v.size(); i++){
        if(m-v[i] < 0){
            m = mid;
            c++;
        }
        m -= v[i];
    }
    if(c <= k)
        return true;
    return false;
}

int main() {
    int n, m, sum = 0;
    scanf("%d %d", &n, &m);
    vector<int> v(m);
    
    for(int i = 0; i < m; i++){
        scanf("%d", &v[i]);
        sum += v[i];
    }
    
    int low = 0;
    int high = sum;
    
    while(true){
        if(low+1 == high)
            break;
        
        i64 mid = (low + high)/2;
        
        if(check(mid, m, v))
            high = mid;
        else 
            low = mid;
    }
    printf("%d", high);
    
    return 0;
}

이렇게 짰다. 예제를 돌려보니 1이 나왔다. 나머지는 내일 생각해봐야겠다.

아 알고보니 v(n)을 해야하는데 크기를 m으로 잡았다. 비슷한 문제 많이 풀어 좀 헷갈렸다. 근데 이거 고쳐도 답이 다르게 나온다. 좀 더 고민해봐야겠다. 

 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
using i64 = long long;

bool check(i64 mid, int k, vector<int> v){
    i64 c = 0;
    i64 m = mid;
    for(int i = 0; i < v.size(); i++){
        if(m-v[i] < 0){
            m = mid;
            c++;
        }
        m -= v[i];
    }
    if(c < k)
        return true;
    return false;
}

int main() {
    int n, m;
    i64 sum = 0;
    scanf("%d %d", &n, &m);
    vector<int> v(n);
    
    for(int i = 0; i < n; i++){
        scanf("%d", &v[i]);
        sum += v[i];
    }
    
    int low = 0;
    i64 high = sum;
    
    while(true){
        if(low+1 == high)
            break;
        
        i64 mid = (low + high)/2;
        
        if(check(mid, m, v))
            high = mid;
        else 
            low = mid;
    }
    printf("%lld", high);
    
    return 0;
}

 

뭔가 if(c <= k) 이 부분에 답이 있을 것 같아서 이걸  if(c < k) 이렇게 고쳤다. 그랬더니 예제 답과 맞게 나온다. 근데 틀렸다 역시 생각을 하고 짜야겠다. 

 

음 생각해도 모르겠다

'백준' 카테고리의 다른 글

1059 수2  (0) 2019.11.17
7795 먹을 것인가 먹힐 것인가  (0) 2019.11.17
2792 보석상자  (0) 2019.11.10
3079 입국심사  (0) 2019.11.10
2110 공유기 설치  (0) 2019.11.10