[Programmers] Lv2. ํ๋ ฌ ํ
๋๋ฆฌ ํ์ ํ๊ธฐ | C++
2023. 6. 28. 19:55ใCoding Test/Programmers
๐๋ฌธ์ ๋ณด๋ฌ๊ฐ๊ธฐ
๐จ๐ปํ์ด ๊ณผ์
ํ๋ ฌ ํฌ๊ธฐ๊ฐ ์ต๋ \( 10000 \times 10000 \)์ด๋ผ์ ์๊ฐ ์ด๊ณผ๊ฐ ๋์ง ์์๊น ๊ฑฑ์ ํ๋๋ฐ, ๋คํํ ํต๊ณผํ์ต๋๋ค. ๋ฌธ์ ์์ฒด๋ ์ด๋ ต์ง ์๋ค์. ๊ทธ๋ฅ ๋ฌธ์ ์์ ๋งํ๋๋๋ก ๊ตฌํํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๊ทผ๋ฐ, ์ต์์น๊ฐ ์์์ ์๊ฐ์ด ์ข ์ค๋ ๊ฑธ๋ ธ๋ค์.
- rows \( \times \) columns ํฌ๊ธฐ์ 2์ฐจ์ ๋ฐฐ์ด ๋ง๋ค๊ณ , ๊ฐ ์ด๊ธฐํํ๊ธฐ
- ์ฃผ์ด์ง query์ ๋ํด ํ
๋๋ฆฌ ํ์ ํ๊ธฐ
- ์ ๋ ๊ฐ์ ์ค์ํ๋ ๋ฐฉ์์ผ๋ก ์งํํ์ต๋๋ค. ์๊ณ ๋ฐฉํฅ ํ์ ์ด๋, ์ \( \rightarrow \) ์ค๋ฅธ์ชฝ \( \rightarrow \) ์๋ \( \rightarrow \) ์ผ์ชฝ ์์๋ก ์งํํ์ต๋๋ค.
- ํ์ ํ๋ฉด์ ๋ง์ฃผ์น ๊ฐ๋ค์ set ์๋ฃ๊ตฌ์กฐ์ ๋ณ๋๋ก ์ ์ฅํด๋์์ต๋๋ค.
- ํ์ ์ ๋ง์น ํ, set ์๋ฃ๊ตฌ์กฐ์ ์ฒซ ๋ฒ์งธ ์์๊ฐ ๋ต์ ๋๋ค.
โ๏ธ์์ค ์ฝ๋ ๋ฐ ๊ฒฐ๊ณผ
#include <vector>
#include <set>
using namespace std;
vector<vector<int>> GMatrix;
class RotatedArea {
public:
RotatedArea(int x1, int y1, int x2, int y2) : _x1(x1), _y1(y1), _x2(x2), _y2(y2)
{
int row = --x1, col = --y1;
_buffer = GMatrix[row][col];
// 1. ์๋ณ ์์๋ค ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋
for (++col; col < y2; ++col)
Swap(row, col);
// 2. ์ค๋ฅธ๋ณ ์์๋ค ์๋์ชฝ์ผ๋ก ์ด๋
for (++row, --col; row < x2; ++row)
Swap(row, col);
// 3. ์๋ซ๋ณ ์์๋ค ์ผ์ชฝ์ผ๋ก ์ด๋
for (--row, --col; col >= y1; --col)
Swap(row, col);
// 4. ์ผ๋ณ ์์๋ค ์์ชฝ์ผ๋ก ์ด๋
for (--row, ++col; row >= x1; --row)
Swap(row, col);
}
int GetMinValue() { return *_elements.begin(); }
private:
void Swap(int row, int col)
{
int currentValue = GMatrix[row][col];
_elements.emplace(_buffer);
GMatrix[row][col] = _buffer;
_buffer = currentValue;
}
public:
int _buffer = 0; // ํ์ ์ํฌ ๋ ์ด์ ๊ฐ์ ์ ์ฅํด๋๋ ์์ ๊ณต๊ฐ
int _x1, _y1;
int _x2 ,_y2;
private:
set<int> _elements;
};
vector<int> solution(int rows, int columns, vector<vector<int>> queries) {
vector<int> answer;
// ํ๋ ฌ ์ด๊ธฐํ
for (int row = 0; row < rows; row++) {
vector<int> currentRow(columns);
for (int col = 0; col < columns; col++)
currentRow[col] = row * columns + col + 1;
GMatrix.emplace_back(currentRow);
}
for (const auto& query : queries) {
int x1 = query[0], y1 = query[1];
int x2 = query[2], y2 = query[3];
RotatedArea area(x1, y1, x2, y2);
answer.emplace_back(area.GetMinValue());
}
return answer;
}
728x90
๋ฐ์ํ
'Coding Test > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] Lv2. ํ ์ด๋ธ ํด์ ํจ์ | C++ (0) | 2023.07.01 |
---|---|
[Programmers] Lv2. ๋ฌธ์์ด ์์ถ | C++ (0) | 2023.06.30 |
[Programmers] Lv2. ์ฐ์๋ ๋ถ๋ถ ์์ด์ ํฉ | C++ (0) | 2023.06.27 |
[Programmers] Lv2. ํฐ ์ ๋ง๋ค๊ธฐ | C++ (0) | 2023.06.27 |
[Programmers] Lv2. ํ๋ฐฐ์์ | C++ (0) | 2023.06.26 |