Gallery Wall - codepath/compsci_guides GitHub Wiki
U-nderstand
Understand what the interviewer is asking for by using test cases and questions about the problem.
- Q:
- What is the desired outcome?
- To organize a collection of art prints into a 2D array where each row contains distinct strings and the number of rows is minimal.
- What is the desired outcome?
P-lan
Plan the solution with appropriate visualizations and pseudocode.
General Idea: Count the occurrences of each print, then distribute them into the minimal number of rows such that each row contains distinct prints.
1) Count the occurrences of each print.
2) Organize prints into rows by their frequency.
3) Initialize the 2D array `rows`.
4) Distribute prints into rows while ensuring each row contains distinct prints.
5) Remove any empty rows and return the result.
⚠️ Common Mistakes
- Not correctly distributing prints into rows, leading to duplicate prints in a row.
I-mplement
def organize_exhibition(collection):
# Step 1: Manually count occurrences of each print
print_count = {}
for print_name in collection:
if print_name in print_count:
print_count[print_name] += 1
else:
print_count[print_name] = 1
# Step 2: Create a dictionary of unique prints grouped by their counts
unique_prints = {}
for print_name, count in print_count.items():
if count in unique_prints:
unique_prints[count].append(print_name)
else:
unique_prints[count] = [print_name]
# Step 3: Determine the number of rows needed
max_count = max(print_count.values())
# Step 4: Initialize the 2D array (rows) to store the organized prints
rows = [[] for _ in range(max_count)]
# Step 5: Distribute prints into rows
for count, prints in unique_prints.items():
for i in range(count):
for print_name in prints:
rows[i].append(print_name)
# Step 6: Remove any empty rows
result = [row for row in rows if row]
return result