Coins 질문드립니다 kingik import java.util.HashMap; import java.util.Arrays; import java.util.Scanner; public class Coins { private int mChange; private int[] mCoins; private HashMap<Integer, Long>[] mCache; @SuppressWarnings("unchecked") public Coins(int change, int[] coins){ mChange = change; mCoins = Arrays.copyOf(coins, coins.length); mCache = new HashMap[mCoins.length]; for(int i=0; i<mCoins.length; i++){ mCache[i] = new HashMap<Integer, Long>(); } } public long calChange(int sum, int coinIdx){ if(mCache[coinIdx].containsKey(sum)){ return mCache[coinIdx].get(sum); } long nPossible =0; int left = mChange -sum; if(coinIdx ==0){ if(left%mCoins[coinIdx] ==0) return 1; else return 0; } for(int i=0; i<left/mCoins[coinIdx]+1; i++){ nPossible+=calChange(sum+mCoins[coinIdx]*i, coinIdx-1); } if(!mCache[coinIdx].containsKey(sum)) mCache[coinIdx].put(sum, nPossible); return nPossible; } public int nChange(){ long nPossible =0; int bCoin = mCoins[mCoins.length-1]; for(int i=0; i<mChange/bCoin+1; i++){ nPossible+=calChange(i*bCoin, mCoins.length-2); } if(nPossible>1000000007){ return (int)nPossible%1000000007; } return (int)nPossible; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int cases = sc.nextInt(); while(cases-- >0){ int change = sc.nextInt(); int [] coins = new int[sc.nextInt()]; for(int i=0; i<coins.length; i++){ coins[i] = sc.nextInt(); } Coins c = new Coins(change, coins); System.out.println(c.nChange()); } sc.close(); } } 문제에 있는 예제는 이 코드가 문제없이 잘 풀어내는데 답안 제출하면 런타임 오류가 뜹니다. hashMap의 크기가 너무 커져서 그런것인가요? 7년 전
0개의 댓글이 있습니다. 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
kingik
문제에 있는 예제는 이 코드가 문제없이 잘 풀어내는데
답안 제출하면 런타임 오류가 뜹니다. hashMap의 크기가 너무 커져서 그런것인가요?
7년 전