문제 해석
M번 인출하여 주어진 이용할 금액을 만족하는 K원 중 최소값을 구하는 문제이다.
만약 돈이 남을 경우, 남은 금액을 모두 넣고 다시 K원을 인출해야하므로 즉 하루 이용금액보다 K원이 작으면 안된다.
코드
문제 풀이
이분탐색을 활용하였다.
하루 이용금액은 arr에 저장해주었고 left는 0, right는 1000000000로 지정해주었다.
while문안을 살펴보면 중간값을 mid로 지정해주었고 이 mid는 하루 인출 금액을 나타낸다. 하루 이용금액을 계산하기 위해 먼저 인출횟수인 count, 현재 금액인 K를 각각 1과 mid로 초기화 해주었다. flag는 하루이용금액이 mid보다 클 경우 바로 break 시켜주기 위해 선언해주었다.
for문 안을 보면 첫 if문에서 남은 금액이 하루이용금액보다 클경우 남은 금액에 하루이용금액을 빼주었고
else에서 남은 금액이 부족한 경우, K에 다시 mid를 넣어주고 인출 횟수에 1을 추가해주었다.
for문이 끝난 후 만약 count가 M보다 작거나 flag가 1일 경우, 하루 인출 가능금액이 적다는 것으로 left를 mid + 1로 바꾸어주었고 그렇지 않을 경우 크다는 것으로 right에 mid - 1을 넣어주고 결과값인 result와 mid 중 최소값을 result에 다시 넣어주었다.
'Koala - 7기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/C++] 17612번 쇼핑몰 (0) | 2022.08.04 |
---|---|
[백준/python] 6236번 용돈관리 (0) | 2022.07.31 |
[백준/Python] 16507번 어두운 건 무서워 (0) | 2022.07.31 |
[백준 / Python] 16139 - 인간-컴퓨터 상호작용 (0) | 2022.07.31 |
[백준/JAVA] 2315번 가로등 끄기 (0) | 2022.07.30 |