Skip to content

Instantly share code, notes, and snippets.

@moomdate
Last active October 28, 2021 12:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save moomdate/8928bcc960909c66463fb2b607bb118f to your computer and use it in GitHub Desktop.
Save moomdate/8928bcc960909c66463fb2b607bb118f to your computer and use it in GitHub Desktop.
package sha1;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.util.stream.Collectors;
import static java.util.stream.Collectors.groupingBy;
public class Main {
public static void main(String[] args) throws IOException {
List<Bank> bankList = new ArrayList() {{
add(new Bank("Bank500", 500));
add(new Bank("Bank100", 100));
add(new Bank("Bank50", 50));
add(new Bank("Bank20", 20));
add(new Bank("Coin10", 10));
add(new Bank("Coin5", 5));
add(new Bank("Coin1", 1));
}};
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter GrandTotal:");
Integer grandTotal = Integer.valueOf(reader.readLine());
System.out.print("Enter RecvMoney:");
Integer rev = Integer.valueOf(reader.readLine());
if (rev - grandTotal > 0) {
List<Bank> sumValue = new ArrayList<>();
int moneyChange = rev - grandTotal;
while (moneyChange > sumStack(sumValue)) {
Optional<Bank> found = bankList.stream().filter(v -> v.getValue() <= (moneyChange - sumStack(sumValue))).findFirst();
if (found.isPresent()) {
sumValue.add(found.get());
} else {
break;
}
}
String stackStr = mapResult(sumValue);
System.out.println("[" + stackStr + "]");
}
}
private static String mapResult(List<Bank> sumValue) {
Map<String, List<Bank>> grouped = sumValue
.stream()
.collect(groupingBy(Bank::getBankName));
Set<String> keys = grouped.keySet();
Set<Bank> returnList = new HashSet<>();
for (String key : keys) {
returnList.add(new Bank(key, grouped.get(key).size()));
}
return returnList
.stream()
.map(v -> "{\"" + v.getBankName() + "\": \"" + v.getValue() + "\"}")
.collect(Collectors.joining(", "));
}
private static Integer sumStack(List<Bank> sumValue) {
return sumValue.stream().map(Bank::getValue).reduce(0, Integer::sum);
}
public static class Bank {
private String bankName;
private Integer value;
Bank(String name, Integer val) {
this.bankName = name;
this.value = val;
}
public String getBankName() {
return bankName;
}
public Integer getValue() {
return this.value;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment