문제 난이도 : Medium
문제 유형 : Search
문제 설명 간략 : 사용가능한 돈이 주어지고 아이스크림 비용이 선언된 배열이 주어진다. 두개의 조합을 선택하여 비용을 모두 소진할 수 있는 배열의 인덱스+1 값을 구하라.
제약사항
- 1 <= t <= 50
- 2 <= money <= 10^9
- 2 <= n <= 5*10^4
- 1 <= cost[i] <= 10^9
idea
- 비용 배열을 돌면서 전체 금액에 필요한 두 조합을 찾는다.
자바 풀이
import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.*;
import java.util.regex.*;
import java.util.stream.*;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;
class Result {
/*
* Complete the 'whatFlavors' function below.
*
* The function accepts following parameters:
* 1. INTEGER_ARRAY cost
* 2. INTEGER money
*/
public static void whatFlavors(List<Integer> cost, int money) {
HashMap<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < cost.size(); i++){
int target = money-cost.get(i);
if(cost.get(i) < money){
if(map.containsKey(target)){
System.out.println(map.get(target) + " " + (i+1));
break;
} else {
map.put(cost.get(i), i+1);
}
}
}
}
}
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(bufferedReader.readLine().trim());
IntStream.range(0, t).forEach(tItr -> {
try {
int money = Integer.parseInt(bufferedReader.readLine().trim());
int n = Integer.parseInt(bufferedReader.readLine().trim());
List<Integer> cost = Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
.map(Integer::parseInt)
.collect(toList());
Result.whatFlavors(cost, money);
} catch (IOException ex) {
throw new RuntimeException(ex);
}
});
bufferedReader.close();
}
}
출처