ধরা যাক একটি ২D ম্যাট্রিক্স রয়েছে, যেখানে matrix[r][c] একটি শহরে কনডোমিনিয়ামের উচ্চতা প্রতিনিধিত্ব করে। পশ্চিম-পূর্ব দৃশ্যেখ linii (west-east skyline) ম্যাট্রিক্সের প্রতিটি সারির সর্বোচ্চ মান নিয়ে দেখা যায়। আর উত্তর-দক্ষিণ দৃশ্যেখ linii (north-south skyline) প্রতিটি কলামের সর্বোচ্চ মান নিয়ে দেখা যায়। আমাদের একটি নতুন ম্যাট্রিক্স খুঁজে বের করতে হবে যেখানে প্রতিটি কনডোমিনিয়ামের উচ্চতা সর্বাধিক সম্ভাব্য উচ্চতায় বৃদ্ধি করা হয়েছে, কিন্তু পশ্চিম-পূর্ব এবং উত্তর-দক্ষিণ দৃশ্যেখ লাইনগুলি অপরিবর্তিত রাখা হয়েছে।
উদাহরণ
ইনপুট ম্যাট্রিক্স:
| 2 | 3 | 4 |
| 5 | 6 | 7 |
| 8 | 9 | 10 |
আউটপুট ম্যাট্রিক্স:
| 4 | 4 | 4 |
| 7 | 7 | 7 |
| 8 | 9 | 10 |
এখানে পশ্চিম-পূর্ব দৃশ্যেখ লাইন হলো [4, 7, 10] এবং উত্তর-দক্ষিণ দৃশ্যেখ লাইন হলো [8, 9, 10]। আমরা প্রথম সারির সব মান ৪ এবং দ্বিতীয় সারির সব মান ৭ করে দিতে পারি দৃশ্যেখ লাইন পরিবর্তন না করে।
সমাধানের ধাপসমূহ
r:= ম্যাট্রিক্সের প্রতিটি সারির সর্বোচ্চ মানগুলির একটি লিস্টc:= ম্যাট্রিক্সের প্রতিটি কলামের সর্বোচ্চ মানগুলির একটি লিস্ট- ম্যাট্রিক্সের সারি সংখ্যা পরিমাণে
iএর জন্য লুপ চালান - ম্যাট্রিক্সের কলাম সংখ্যা পরিমাণে
jএর জন্য লুপ চালান - যদি
r[i] < c[j]হয়, তবেmatrix[i][j] := r[i] - অন্যথায়,
matrix[i][j] := c[j] - আপডেট করা ম্যাট্রিক্স ফেরত দিন
পাইথন ইমপ্লিমেন্টেশন
class Solution:
def solve(self, matrix):
r = [max(row) for row in matrix]
c = [max(col) for col in zip(*matrix)]
for i in range(len(matrix)):
for j in range(len(matrix[i])):
if r[i] < c[j]:
matrix[i][j] = r[i]
else:
matrix[i][j] = c[j]
return matrix
ob = Solution()
matrix = [
[2, 3, 4],
[5, 6, 7],
[8, 9, 10]
]
print(ob.solve(matrix))
ইনপুট
[[2, 3, 4], [5, 6, 7], [8, 9, 10]]
আউটপুট
[[4, 4, 4], [7, 7, 7], [8, 9, 10]]