-
Notifications
You must be signed in to change notification settings - Fork 273
Eeyore's House
TIP102 Unit 1 Session 2 (Click for link to problem statements)
- 💡 Difficulty: Easy
- ⏰ Time to complete: 10 mins
- 🛠️ Topics: Arrays, Nested Loops, Modulo Operation
Understand what the interviewer is asking for by using test cases and questions about the problem.
-
Q: What is the input to the function?
- A: The input consists of two integer arrays
pile1andpile2, and a positive integerk.
- A: The input consists of two integer arrays
-
Q: What is the expected output of the function?
- A: The function should return the number of good pairs
(i, j)wherepile1[i]is divisible bypile2[j] * k.
- A: The function should return the number of good pairs
-
Q: How is a good pair defined?
- A: A pair
(i, j)is called good ifpile1[i] % (pile2[j] * k) == 0.
- A: A pair
-
Q: What should the function return if there are no good pairs?
- A: The function should return
0if no good pairs are found.
- A: The function should return
-
Q: Can the arrays be empty or have elements that are zero?
- A: The problem assumes the arrays contain positive integers, as stick lengths cannot be zero. Either pile may be empty, in which case there are no good pairs and the function returns 0.
-
The function
good_pairs()should take two integer arrayspile1andpile2, and a positive integerk, returning the number of good pairs. A pair(i, j)is good ifpile1[i]is divisible bypile2[j] * k.
HAPPY CASE
Input: pile1 = [1, 3, 4], pile2 = [1, 3, 4], k = 1
Expected Output: 5
Input: pile1 = [1, 2, 4, 12], pile2 = [2, 4], k = 3
Expected Output: 2
EDGE CASE
Input: pile1 = [2, 4, 6], pile2 = [1, 1, 1], k = 2
Expected Output: 9
Input: pile1 = [], pile2 = [1, 2, 3], k = 1
Expected Output: 0
Plan the solution with appropriate visualizations and pseudocode.
General Idea: Iterate through each stick in pile1 and for each stick, iterate through each stick in pile2. Check if pile1[i] is divisible by pile2[j] * k. Count the number of such good pairs.
1. Initialize a counter `count` to 0.
2. Iterate through each stick in `pile1` using index `i`.
3. For each stick in `pile1`, iterate through each stick in `pile2` using index `j`.
4. Check if `pile1[i]` is divisible by `pile2[j] * k`.
5. If the condition is met, increment `count`.
6. Return the total `count` of good pairs.- Forgetting to handle empty arrays.
- Incorrectly checking the divisibility condition.
Implement the code to solve the algorithm.
def good_pairs(pile1, pile2, k):
# Initialize the counter for good pairs
count = 0
# Iterate through each stick in pile1
for i in range(len(pile1)):
# Iterate through each stick in pile2
for j in range(len(pile2)):
# Check if pile1[i] is divisible by pile2[j] * k
if pile1[i] % (pile2[j] * k) == 0:
# Increment the counter if the condition is met
count += 1
# Return the total number of good pairs
return count