Source : https://www.hackerrank.com/challenges/icecream-parlor
Sunny and Johnny like to pool their money and go to the ice cream parlor. Johnny never buys the same flavor that Sunny does. The only other rule they have is that they spend all of their money.
Given a list of prices for the flavors of ice cream, select the two that will cost all of the money they have.
For example, they have to spend and there are flavors costing . The two flavors costing and meet the criteria. Using -based indexing, they are at indices and .
Function Description
Complete the icecreamParlor function in the editor below. It should return an array containing the indices of the prices of the two flavors they buy, sorted ascending.
icecreamParlor has the following parameter(s):
- m: an integer denoting the amount of money they have to spend
- cost: an integer array denoting the cost of each flavor of ice cream
Input Format
The first line contains an integer, , denoting the number of trips to the ice cream parlor. The next sets of lines each describe a visit. Each trip is described as follows:
- The integer , the amount of money they have pooled.
- The integer , the number of flavors offered at the time.
- space-separated integers denoting the cost of each flavor: .
Note: The index within the cost array represents the flavor of the ice cream purchased.
Constraints
- , ∀
- There will always be a unique solution.
Output Format
For each test case, print two space-separated integers denoting the indices of the two flavors purchased, in ascending order.
Sample Input
2
4
5
1 4 5 3 2
4
4
2 2 4 3
Sample Output
1 41 2
Explanation
Sunny and Johnny make the following two trips to the parlor:
- The first time, they pool together dollars. Of the five flavors available that day, flavors and have a total cost of .
- The second time, they pool together dollars. TOf the four flavors available that day, flavors and have a total cost of .
Source : https://www.hackerrank.com/challenges/icecream-parlor
Solution
// Karthikalapati.blogspot.com | |
import java.util.Scanner; | |
import java.util.HashMap; | |
// Time Complexity: O(n) | |
// Space Complexity: O(n) | |
public class Solution { | |
public static void main(String[] args) { | |
Scanner scan = new Scanner(System.in); | |
int t = scan.nextInt(); | |
while (t-- > 0) { | |
int m = scan.nextInt(); | |
int n = scan.nextInt(); | |
int [] costs = new int[n]; | |
for (int i = 0; i < n; i++) { | |
costs[i] = scan.nextInt(); | |
} | |
buyIceCream(costs, m); | |
} | |
scan.close(); | |
} | |
public static void buyIceCream(int [] costs, int money) { | |
HashMap<Integer, Integer> map = new HashMap(); // key = cost, value = ice cream ID | |
for (int i = 0; i < costs.length; i++) { | |
int icecreamID = i + 1; | |
int cost = costs[i]; | |
/* Find 2 flavors to buy that sum to "money" */ | |
int otherCost = money - cost; | |
if (map.containsKey(otherCost)) { | |
System.out.println(map.get(otherCost) + " " + icecreamID); | |
} | |
map.putIfAbsent(cost, icecreamID); | |
} | |
} | |
} |
No comments:
Post a Comment