
https://school.programmers.co.kr/learn/courses/30/lessons/120837
거스름돈 문제와 완전히 똑같은 문제다. 시간이 오래 걸린 포인트는 while문의 >= 부분이었다.
>=를 써야 정확하게 “딱 나누어 떨어지는 경우”까지 처리되기 때문이다.
hp가 5가 남았는데>이면 5에서 처리할 수 없기 때문이다.
그런데 사실 이 문제는 while문도 필요가 없다. 내가 이미 hp / top 식으로 한번에 처리했기 때문이다. 그래서 2가지 방식으로 풀이할 수 있겠다.
내가 풀이한 답 (while 필요없음)
class Solution {
public int solution(int hp) {
int top = 5;
int middle = 3;
int low = 1;
int answer = 0;
while(hp >= top) {
answer += hp / top;
hp %= top;
}
while (hp >= middle) {
answer += hp / middle;
hp %= middle;
}
while (hp >= low) {
answer += hp / low;
hp %= low;
}
return answer;
}
}
가장 간단한 답
class Solution {
public int solution(int hp) {
int answer = 0;
answer += hp / 5;
hp %= 5;
answer += hp / 3;
hp %= 3;
answer += hp;
return answer;
}
}