๋์ด๋: Medium
ํค์๋: Hash Table
๐ฒ ๋ฌธ์
X-Y ํ๋ฉด์์ ์ ๋ค์ ๋ฐฐ์ด points๊ฐ ์ฃผ์ด์ก์ต๋๋ค. ์ฌ๊ธฐ์ points[i] = [xi, yi]์
๋๋ค.
์ด๋ฌํ ์ ๋ค๋ก ํ์ฑ๋ X์ถ๊ณผ Y์ถ์ ํํํ ์ง์ฌ๊ฐํ์ ์ต์ ๋ฉด์ ์ ๋ฐํํฉ๋๋ค. ๋ง์ฝ ๊ทธ๋ฌํ ์ง์ฌ๊ฐํ์ด ์๋ค๋ฉด, 0์ ๋ฐํํฉ๋๋ค.
๋ฌธ์ ์๋ฌธ: https://leetcode.com/problems/minimum-area-rectangle/description/
Example 1:
Input: points = [[1,1],[1,3],[3,1],[3,3],[2,2]]
Output: 4
๐ฒ ๋ฌธ์ ํ์ด
๋ง๋ค ์ ์๋ ์ฌ๊ฐํ์ ํ์ํ๋ฉด์ ์ฌ๊ฐํ๋ค ์ค ์ต์ ๋ฉด์ ๊ฐ์ ๊ตฌํ๊ณ ์ํ๋ค.
์ด๋ฅผ ์ํด์ ๋ ๊ฐ์ ์ ์ด ์ฃผ์ด์ก์ ๋ ์ด ๋ ์ ์ธ์ ์ฌ๊ฐํ์ ๋ง๋ค ์ ์๋ ์ ๋ค์ด ์กด์ฌํ๋ ์ง O(1) ์ผ๋ก ํ์ํ๋ ํํ๋ก ์ฌ๊ฐํ ๋ฉด์ ์ ๊ตฌํ ์ ์๋ค.
class Solution {
public:
int minAreaRect(vector<vector<int>>& points) {
unordered_map<int, set<int>> hash;
for(auto point : points){
auto x = point[0], y = point[1];
hash[x].insert(y);
}
int MAX = 16 * pow(10, 8);
int ans = MAX;
for(auto i=0; i < points.size()-1; ++i){
for(auto j=i; j < points.size(); ++j){
auto x1 = points[i][0], y1 = points[i][1];
auto x2 = points[j][0], y2 = points[j][1];
if(x1 == x2) continue;
if(y1 == y2) continue;
// check rectangle
if(hash[x1].find(y2) != hash[x1].end() && hash[x2].find(y1) != hash[x2].end())
ans = min(ans, abs(x1-x2) * abs(y1-y2));
}
}
if(ans == MAX)
ans = 0;
return ans;
}
};
ํด๋น ์ฑ๋์์ Leet Code ํด์คํด ๋์ ๊ฒ๋ค์ด ์๋๋ฐ ๊ณผ์ ์ด ์ฒด๊ณ์ ์ด๊ณ ์ข์ ๊ฒ ๊ฐ๋ค :)
https://youtu.be/xvuuENPhEH4?feature=shared
'IN DEPTH CAKE > Supercoder' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[c++/LeetCode-DP] 746. Min Cost Climbing Stairs (1) | 2024.05.06 |
---|---|
[c++/LeetCode-DP] 70. Climbing Stairs (1) | 2024.05.06 |
[c++/LeetCode-Hash Table] 692. Top K Frequent Words (1) | 2024.05.05 |
[c++/LeetCode-Hash Table] 387. First Unique Character in a String (1) | 2024.05.05 |
[c++/LeetCode-Hash Table] 1. Two Sum (1) | 2024.05.05 |