diff --git a/sitou/src/B147_slime.java b/sitou/src/B147_slime.java new file mode 100644 index 0000000000000000000000000000000000000000..b84b2885ef525802f2c3421bf5ce75511e62ea54 --- /dev/null +++ b/sitou/src/B147_slime.java @@ -0,0 +1,55 @@ +package src; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Scanner; + +public class B147_slime { + static final int FAILED = -1; + + public static void main(String[] args) { + final Scanner sc = new Scanner(System.in); + final int slimeNum = sc.nextInt(); + final int mySize = sc.nextInt(); + ArrayList slimesSizeList = new ArrayList<>(); + for (int i = 0; i < slimeNum; i++) { + slimesSizeList.add(sc.nextInt()); + } + + final int count = mergeSlimes(mySize, slimesSizeList); + System.out.println(count); + sc.close(); + } + + private static int mergeSlimes(final int mySize, final ArrayList slimesSizeList) { + int count = 0; + + int nowMySize = mySize; + ArrayList nowSlimesSizeList = new ArrayList<>(slimesSizeList); + Collections.sort(nowSlimesSizeList, Collections.reverseOrder()); // サイズが大きいものから順に比較するため + + while (!nowSlimesSizeList.isEmpty() && nowMySize <= nowSlimesSizeList.get(0)) { // 自分が最大サイズになったら終わり + int mergedIndex = findMergableSlime(nowMySize, nowSlimesSizeList); + + if (mergedIndex != FAILED) { + nowMySize += nowSlimesSizeList.get(mergedIndex); + nowSlimesSizeList.remove(mergedIndex); + count++; + } else { + count = FAILED; + break; + } + } + + return count; + } + + private static int findMergableSlime(final int nowMySize, final ArrayList nowSlimesSizeList) { + for (int i = 0; i < nowSlimesSizeList.size(); i++) { // sizeが可変だと拡張forはできない? + スライムのsizeとリストの.sizeが紛らわしい? + if (nowMySize >= nowSlimesSizeList.get(i)) { + return i; + } + } + return FAILED; + } +}