Skip to content

Commit 3fe3768

Browse files
author
Gonzalo Diaz
committed
[Hacker Rank] Interview Preparation Kit: Greedy Algorithms: Luck Balance. Solved ✓.
1 parent 20d26a8 commit 3fe3768

File tree

3 files changed

+217
-0
lines changed
  • algorithm-exercises-csharp/src/hackerrank/interview_preparation_kit/greedy_algorithms
  • algorithm-exercises-csharp-test/src/hackerrank/interview_preparation_kit/greedy_algorithms
  • docs/hackerrank/interview_preparation_kit/greedy_algorithms

3 files changed

+217
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
namespace algorithm_exercises_csharp.hackerrank.interview_preparation_kit;
2+
3+
[TestClass]
4+
public class LuckBalanceTest
5+
{
6+
public class LuckBalanceTestCase
7+
{
8+
public string title = "";
9+
public int k;
10+
public List<List<int>> contests = [];
11+
public int expected;
12+
}
13+
14+
private static readonly LuckBalanceTestCase[] tests = [
15+
new()
16+
{
17+
title = "Sample Test case 0",
18+
k = 3,
19+
contests = [[5, 1], [2, 1], [1, 1], [8, 1], [10, 0], [5, 0]],
20+
expected = 29
21+
},
22+
new()
23+
{
24+
title = "Sample Test case 1",
25+
k = 5,
26+
contests = [[13, 1], [10, 1], [9, 1], [8, 1], [13, 1], [12, 1], [18, 1], [13, 1]],
27+
expected = 42
28+
},
29+
new()
30+
{
31+
title = "Sample Test case 2",
32+
k = 2,
33+
contests = [[5, 1], [4, 0], [6, 1], [2, 1], [8, 0]],
34+
expected = 21
35+
}
36+
];
37+
38+
[TestMethod]
39+
public void testLuckBalance()
40+
{
41+
int result;
42+
43+
foreach (LuckBalanceTestCase test in tests)
44+
{
45+
result = LuckBalance.luckBalance(test.k, test.contests);
46+
Assert.AreEqual(
47+
test.expected,
48+
result,
49+
String.Format(
50+
"testLuckBalance({0}, {1}) => must be: {2}",
51+
test.k,
52+
test.contests.ToString(),
53+
test.expected
54+
)
55+
);
56+
}
57+
}
58+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
// @link Problem definition [[docs/hackerrank/interview_preparation_kit/greedy_algorithms/luck-balance.md]]
2+
3+
namespace algorithm_exercises_csharp.hackerrank.interview_preparation_kit;
4+
5+
using System.Diagnostics.CodeAnalysis;
6+
7+
public class Competition(int _luck, int _important)
8+
{
9+
public int luck => _luck;
10+
public int important => _important;
11+
}
12+
13+
public class LuckBalance
14+
{
15+
[ExcludeFromCodeCoverage]
16+
protected LuckBalance() { }
17+
18+
public static int luckBalance(int k, List<List<int>> contests)
19+
{
20+
List<Competition> important_competitions = [];
21+
List<Competition> nonimportant_competitions = [];
22+
23+
foreach (var x in contests)
24+
{
25+
var luck = x[0];
26+
var important = x[1];
27+
28+
if (important == 1)
29+
{
30+
important_competitions.Add(new Competition(luck, important));
31+
}
32+
else
33+
{
34+
nonimportant_competitions.Add(new Competition(luck, important));
35+
}
36+
}
37+
38+
important_competitions = [.. important_competitions
39+
.OrderByDescending(s => s.important)
40+
.ThenByDescending(s => s.luck)];
41+
42+
int total = 0;
43+
int size = important_competitions.Count;
44+
45+
for (int i = 0; i < Math.Min(k, size); i++)
46+
{
47+
total += important_competitions[i].luck;
48+
}
49+
50+
for (int i = Math.Min(k, size); i < size; i++)
51+
{
52+
total -= important_competitions[i].luck;
53+
}
54+
55+
foreach (Competition x in nonimportant_competitions)
56+
{
57+
total += x.luck;
58+
}
59+
60+
return total;
61+
}
62+
}
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
# [Greedy Algorithms: Luck Balance](https://www.hackerrank.com/challenges/luck-balance)
2+
3+
- Difficulty: `#easy`
4+
- Category: `#ProblemSolvingBasic`
5+
6+
Lena is preparing for an important coding competition that is preceded
7+
by a number of sequential preliminary contests.
8+
Initially, her luck balance is 0.
9+
She believes in "saving luck", and wants to check her theory.
10+
Each contest is described by two integers, `L[i]` and `T[i]`:
11+
12+
- `L[i]` is the amount of luck associated with a contest.
13+
If Lena wins the contest, her luck balance will decrease by `L[i]`;
14+
if she loses it, her luck balance will increase by `L[i]`.
15+
16+
- `T[i]` denotes the contest's importance rating.
17+
It's equal to `1` if the contest is important, and it's equal to `0` if it's unimportant.
18+
19+
If Lena loses no more than `k` important contests, what is the maximum amount
20+
of luck she can have after competing in all the preliminary contests?
21+
This value may be negative.
22+
23+
## Example
24+
25+
```text
26+
Contest L[i] T[i]
27+
1 5 1
28+
2 1 1
29+
3 4 0
30+
```
31+
32+
If Lena loses all of the contests, her will be `5 + 1 +4 = 10`.
33+
Since she is allowed to lose important contests,
34+
and there are only `2` important contests,
35+
she can lose all three contests to maximize her luck at `10`.
36+
37+
If `k = 1`, she has to win at least of the important contests.
38+
She would choose to win the lowest value important contest worth `1`.
39+
Her final luck will be `5 + 4 - 1 = 8`.
40+
41+
## Function Description
42+
43+
Complete the luckBalance function in the editor below.
44+
45+
luckBalance has the following parameter(s):
46+
47+
- `int k`: the number of important contests Lena can lose
48+
- `int contests[n][2]`: a 2D array of integers where each `contests[i]`
49+
contains two integers that represent the luck balance and importance of the contest
50+
51+
## Returns
52+
53+
- `int`: the maximum luck balance achievable
54+
55+
## Input Format
56+
57+
The first line contains two space-separated integers `n` and `k`,
58+
the number of preliminary contests and the maximum number
59+
of important contests Lena can lose.
60+
61+
Each of the next lines contains two space-separated integers,
62+
`L[i]` and `T[i]`, the contest's luck balance and its importance rating.
63+
64+
## Constraints
65+
66+
- $ 1 \leq n \leq 100 $
67+
- $ 0 \leq k \leq N $
68+
- $ 1 \leq L[i] \leq 10^4 $
69+
- $ T[i] \isin \{0,1\} $
70+
71+
## Sample Input
72+
73+
```text
74+
STDIN Function
75+
----- --------
76+
6 3 n = 6, k = 3
77+
5 1 contests = [[5, 1], [2, 1], [1, 1], [8, 1], [10, 0], [5, 0]]
78+
2 1
79+
1 1
80+
8 1
81+
10 0
82+
5 0
83+
```
84+
85+
## Sample Output
86+
87+
```text
88+
29
89+
```
90+
91+
## Explanation
92+
93+
There are `n = 6` contests. Of these contests, `4` are important
94+
and she cannot lose more than of them.
95+
Lena maximizes her luck if she wins the $ 3^{rd} $ important contest
96+
(where `L[i] = 1`) and loses all of the other five contests for a total
97+
luck balance of `5 + 2 + 8 + 10 + 5 - 1 = 29`.

0 commit comments

Comments
 (0)