6236 용돈 관리 / c++ / Silver1 / 40분
문제 및 코드

접근 방식
이분 탐색
- 처음 접근한 방법은 Min 1, Max 987’654’321 로 잡고, 이분 탐색으로 적절한 Mid 값을 찾아내는 것이었다.
- 여기서 한가지 오류가 있었는데, 나중에 다시 확인해보니 하루에 최대 10’000원을 소비하는 경우가 있을 수 있고, 그런 날이 100’000일 있을 수 있다.
- 그렇다면 만약 인출 횟수 M이 1이라고 했을 때, 한번에 모든 돈을 뽑아놔야 하기 때문에 적절한 Mid 값은 1’000’000’000 (10억) 이다.
- 보통은 웬만하면 자주 사용하는 MAX 값인 987’654’321 을 넘어가지 않았었는데, 여기서는 최대값이 넘어가버려서 이를 수정해야했다.
- 추가로 적절한 Mid 값을 구하는 공식에서, 매일 돈이 부족하면 인출횟수를 올리고, 해당 Mid 값으로 잔액을 갱신했었는데, 이 때 그 날의 지출 (Spend[i]) 보다 잔액 (CurrentMoney) 가 적은 경우를 상정하지 않아서 또 틀렸었다.
- 그래서 우선 인출 횟수와 잔액을 갱신한 다음, 그 상태에서 그 날의 지출보다 잔액이 작은 경우는 false 를 반환하도록 수정했다.
- 해결
다시 생각해 볼 점
- 오랜만에 푸는 이분 탐색 문제였다. 전체적인 흐름은 기억에 남아있어서 구현하는데 어려움은 없었다.
- 하지만 디테일한 부분에서 실수들이 조금 있었다. 특히 변수의 범위 확인은 문제 분석 단계에서 항상 확인하고 넘어갔어야 했는데 이 부분을 소홀히 했더니 꽤나 큰 오류로 다가왔다.
- 다음부터는 꼭 문제를 분석하는 단계에서 변수들의 범위를 확인하고 넘어가야겠다.