치킨을 한 마리 시킬 때마다 쿠폰 한 장을 준다. 쿠폰 10장을 모으면 치킨 한 마리를 서비스로 받을 수 있다. 중요한 점은, 서비스로 받은 치킨도 쿠폰을 제공한다는 것이다. 이 규칙을 이용해 받을 수 있는 최대 서비스 치킨 수를 구하는 문제다 문제를 처음 봤을 땐 간단하게 치킨을 시키면서 받은 쿠폰으로 서비스 치킨을 받을 수 있겠다고 생각했다. chicken / 10만 하면 될 줄 알았는데, 서비스 치킨에도 쿠폰이 있다는 점을 빼먹고 그 부분을 제대로 계산하지 않아서 여러 번 틀렸다. 그때는 변수 위치를 잘못 잡아서 반복문 바깥에서 쿠폰을 계속 업데이트하려 했고, 이 부분이 문제가 됐다. 결국 chicken + coupon을 잘 계산해서 조건문 안에서 값을 제대로 갱신할 수 있게 수정했다.

class Solution {
    public int solution(int chicken) {
        int service = 0, coupon = 0;

        while (chicken + coupon >= 10) { 
            int totalCoupons = chicken + coupon;
            service += totalCoupons / 10;
            coupon = totalCoupons % 10;
            chicken = totalCoupons / 10;
        }

        return service;
    }
}

돌아보며.. 처음에는 너무 단순하게 생각하고 문제를 풀었기 때문에, 서비스 치킨도 쿠폰을 받는다는 점을 간과했다. 반복문 바깥에서 쿠폰을 갱신하려다 보니 문제가 생겼고, 이를 잘못 계산했던 게 한참 걸렸던 이유였다. 이제는 이런 실수를 줄이기 위해 조건을 좀 더 꼼꼼히 체크해야겠다고 생각했다. 단순한 실수라도 반복문이나 조건문에서 제대로 갱신되는지 다시 한번 점검하는 습관을 들여야겠다.