[プログラマ/Java]欠落金額の計算

4922 ワード

質問リンク


https://programmers.co.kr/learn/courses/30/lessons/82612

質問する



ソリューション


[失敗]
public class Solution {
    public long solution(int price, int money, int count) {
        
        for (int i=0; i<count; i++) {
            total_price += price * (i+1);
        }
        
        if (total_price >= money) {
            return total_price - money;
        } else {
            return 0;
        }
    }
}

に質問

  • price最大値2500、count最大値2500、2つの最大値を加えるとintの最大範囲を超えます.これは
  • オーバーフローのためです.

    ソリューション

  • 使用料の合計は(n*(1+n)/2(等比数列)
  • と表すことができる.
  • このときcountは強制的にlongに変換され、計算値
  • が導出される.

    最終コード

    public class Solution {
        public long solution(int price, int money, int count) {
            
            long total_price = price * ((long)count * (1 + count) / 2);
            if (total_price >= money) {
                return total_price - money;
            } else {
                return 0;
            }
        }
    }