In this post, We are going to solve HackerRank Electronics Shop Problem. A person wants to determine the most expensive computer keyboard and USB drive that can be purchased with a given 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]
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 drivers, the prices of the USB drives.
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.

Electronics Shop C Solution
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
#include <stdbool.h>
int main(){
int s;
int n;
int m;
scanf("%d %d %d",&s,&n,&m);
int *keyboards = malloc(sizeof(int) * n);
for(int keyboards_i = 0; keyboards_i < n; keyboards_i++){
scanf("%d",&keyboards[keyboards_i]);
}
int *pendrives = malloc(sizeof(int) * m);
for(int pendrives_i = 0; pendrives_i < m; pendrives_i++){
scanf("%d",&pendrives[pendrives_i]);
}
int temp=-1;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(temp<keyboards[i] + pendrives[j] && keyboards[i]+ pendrives[j]<=s)
temp=keyboards[i] + pendrives[j];
}
}
printf("%d",temp);
return 0;
}
Electronics Shop C++ Solution
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 11234;
int k[N], u[N];
int main() {
int s, n, m;
cin >> s >> n >> m;
for(int i = 1; i <= n; ++i) cin >> k[i];
for(int i = 1; i <= m; ++i) cin >> u[i];
int ans = -1;
for(int i = 1; i <= n; ++i){
for(int j = 1; j <= m; ++j){
int x = k[i] + u[j];
if(x <= s && ans <= x)
ans = x;
}
}
cout << ans << '\n';
}
Electronics Shop C Sharp Solution
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
class Solution
{
static void Main(String[] args)
{
string[] tokens_s = Console.ReadLine().Split(' ');
int s = Convert.ToInt32(tokens_s[0]);
int n = Convert.ToInt32(tokens_s[1]);
int m = Convert.ToInt32(tokens_s[2]);
string[] keyboards_temp = Console.ReadLine().Split(' ');
int[] keyboards = Array.ConvertAll(keyboards_temp,Int32.Parse);
string[] pendrives_temp = Console.ReadLine().Split(' ');
int[] pendrives = Array.ConvertAll(pendrives_temp,Int32.Parse);
int ans = -1;
for(int i = 0; i<keyboards.Length; i++)
for(int j = 0; j<pendrives.Length; j++)
{
int cost = keyboards[i] + pendrives[j];
if (cost <= s && cost > ans)
{
ans = cost;
}
}
Console.WriteLine(ans);
}
}
Electronics Shop Java Solution
import java.io.*;
import java.util.*;
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
static int getMoneySpent(List<Integer> keyboards, List<Integer> drives, int s){
int max=-1;
for(int i=keyboards.size()-1;i>=0;i--)
{
for(int j=drives.size()-1;j>=0;j--)
{
if(keyboards.get(i)+drives.get(j)<=s && max<keyboards.get(i)+drives.get(j))
max=keyboards.get(i)+drives.get(j);
}
}
return max;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int s = in.nextInt();
int n = in.nextInt();
int m = in.nextInt();
ArrayList<Integer> keyboards = new ArrayList<Integer>(n);
for(int keyboards_i=0; keyboards_i < n; keyboards_i++){
keyboards.add(in.nextInt());
}
ArrayList<Integer> drives = new ArrayList<Integer>(m);
for(int drives_i=0; drives_i < m; drives_i++){
drives.add(in.nextInt());
}
// The maximum amount of money she can spend on a keyboard and USB drive, or -1 if she can't purchase both items
int moneySpent = getMoneySpent(keyboards, drives, s);
System.out.println(moneySpent);
}
}
Electronics Shop JavaScript Solution
process.stdin.resume();
process.stdin.setEncoding('ascii');
var input_stdin = "";
var input_stdin_array = "";
var input_currentline = 0;
process.stdin.on('data', function (data) {
input_stdin += data;
});
process.stdin.on('end', function () {
input_stdin_array = input_stdin.split("\n");
main();
});
function readLine() {
return input_stdin_array[input_currentline++];
}
/////////////// ignore above this line ////////////////////
function main() {
var [ s, n, m ] = readLine().split(' ').map(Number);
keyboards = readLine().split(' ').map(Number);
pendrives = readLine().split(' ').map(Number);
var maxS = -1;
for( let i = 0; i < n; i++ ) {
for( let j = 0; j < m; j++ ) {
var sum = keyboards[ i ] + pendrives[ j ];
if ( sum <= s && sum > maxS ) {
maxS = sum;
}
if ( sum === s ) break;
}
if ( sum === s ) break;
}
console.log( maxS );
}
Electronics Shop Python Solution
#!/bin/python3
import sys
s,n,m = input().strip().split(' ')
s,n,m = [int(s),int(n),int(m)]
keyboards = [int(keyboards_temp) for keyboards_temp in input().strip().split(' ')]
pendrives = [int(pendrives_temp) for pendrives_temp in input().strip().split(' ')]
valMax = -1
for key in keyboards:
for mouse in pendrives:
total = key+mouse
if total > valMax and total <= s:
valMax = total
print(valMax)
Other Solution