Hello coders, today we are going to solve Electronics Shop HackerRank Solution which is a Part of HackerRank Algorithm Series.
Task
A person wants to determine the most expensive computer keyboard and USB drive that can be purchased with a give budget. Given price lists for keyboards and USB drives and a budget, find the cost to buy them. If it is not possible to buy both items, return -1.
Example
b = 60
keyboards = [40, 50, 60]
drivers = [5, 8, 12]
The person can buy a 40 keyboard + 12 USB drive = 52, or a 50 keyboard + 8 USB drive = 58. Choose the latter as the more expensive option and return 58.
Function Description
Complete the getMoneySpent function in the editor below.
getMoneySpent has the following parameter(s):
- int keyboards[n]: the keyboard prices
- int drives[m]: the drive prices
- int b: the budget
Returns
- int: the maximum that can be spent, or -1 if it is not possible to buy both items
Input Format
The first line contains three space-separated integers b, n, and m, the budget, the number of keyboard models and the number of USB drive models.
The second line contains n space-separated integers keyboard[i], the prices of each keyboard model.
The third line contains m space-separated integers drives, the prices of the USB drives.
Constraints
- 1 <= n, m < 1000
- 1 <= b <= 106
- The price of each item is in the inclusive range [1, 106].
Sample Input 0
10 2 3
3 1
5 2 8
Sample Output 0
9
Explanation 0
Buy the 2nd keyboard and the 3rd USB drive for a total cost of 8 + 1 = 9.
Sample Input 1
5 1 1
4
5
Sample Output 1
-1
Explanation 1
There is no way to buy one keyboard and one USB drive because 4 + 5 > 5, so return -1.
Solution – Electronics Shop
C++
#include <bits/stdc++.h> using namespace std; int ans=-1, a[1005], b[1005], i, n, m, s, j; int main() { scanf("%d%d%d", &s, &n, &m); for(i=1; i<=n; ++i) scanf("%d", &a[i]); for(i=1; i<=m; ++i) scanf("%d", &b[i]); for(i=1; i<=n; ++i) for(j=1; j<=m; ++j) if(a[i]+b[j]<=s) ans = max(a[i]+b[j], ans); printf("%d\n", ans); return 0; }
Python
import sys s,n,m = input().strip().split(' ') s,n,m = [int(s),int(n),int(m)] a = [int(keyboards_temp) for keyboards_temp in input().strip().split(' ')] b = [int(pendrives_temp) for pendrives_temp in input().strip().split(' ')] ans = -1 for x in a: for y in b: if x + y <= s: ans = max(ans, x + y) print (ans)
Java
import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class Solution { public static void main(String[] args) { Scanner in = new Scanner(System.in); int s = in.nextInt(); int n = in.nextInt(); int m = in.nextInt(); int[] keyboards = new int[n]; for(int keyboards_i=0; keyboards_i < n; keyboards_i++){ keyboards[keyboards_i] = in.nextInt(); } int[] pendrives = new int[m]; for(int pendrives_i=0; pendrives_i < m; pendrives_i++){ pendrives[pendrives_i] = in.nextInt(); } int max=0; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(keyboards[i]+pendrives[j]<=s){ if(max<keyboards[i]+pendrives[j]){ max=keyboards[i]+pendrives[j]; } } } } System.out.println(max==0?-1:max); } }
Disclaimer: The above Problem (Electronics Shop) is generated by Hacker Rank but the Solution is Provided by CodingBroz. This tutorial is only for Educational and Learning Purpose.