본문 바로가기

알고리즘 문제 풀이/Baekjoon

6236 - 용돈 관리

반응형
SMALL

 

 

6236번: 용돈 관리

현우는 용돈을 효율적으로 활용하기 위해 계획을 짜기로 하였다. 현우는 앞으로 N일 동안 자신이 사용할 금액을 계산하였고, 돈을 펑펑 쓰지 않기 위해 정확히 M번만 통장에서 돈을 빼서 쓰기로

www.acmicpc.net

#include <stdio.h>

const int LN = 1e5 + 30;

int N, M, R;
int COST[LN];

void init() {
  scanf("%d %d", &N, &M);

  for (int n = 0; n < N; ++n) {
    scanf("%d", &COST[n]);
  }
}

int cal(int money) {
  int balance = money;
  int count = 1;

  for (int n = 0; n < N; ++n) {
    if (money < COST[n]) {
      return 0;
    }

    if (balance < COST[n]) {
      balance = money;
      count++;
    }

    balance -= COST[n];

  }

  return count <= M;
}

void bs(int s, int e) {
  if (s > e) { return; }

  int m = (s + e) / 2;

  if (cal(m)) {
    R = m;
    bs(s, m - 1);
  } else {
    bs(m + 1, e);
  };
}

int main(void) {
  freopen("6236.txt", "r", stdin);

  init();

  bs(1, 1e9);

  printf("%d", R);

  return 0;
}

 

이분 탐색 초기 범위 조심

반응형
LIST

'알고리즘 문제 풀이 > Baekjoon' 카테고리의 다른 글

18110 - solved.ac  (1) 2023.12.23
1300 - K번째 수  (1) 2023.12.23
1777 - 순열복원  (2) 2023.12.22
1306 - 달려라 홍준  (1) 2023.12.21
1715 - 카드 정렬하기  (1) 2023.12.21