반응형
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
행렬의 부분 행렬을 만들고 테두리를 회전시킬 때, 회전된 값 중 가장 작은 값은 무엇인지 찾아주세요.
풀이 방법
테두리를 회전시키는 로직은 deque를 이용하면 쉽게 해결이 가능합니다.
테두리를 순회하며 시계방향으로 값을 넣어준 후, deque의 가장 뒤에 있는 값을 앞으로 다시 넣어주면 됩니다.
deque<int> dq;
vector<pair<int, int>> pos;
for (int i = sx; i <= ex; i++)
{
dq.push_back(table[sy][i]);
pos.push_back({sy, i});
}
for (int i = sy+1; i <= ey; i++)
{
dq.push_back(table[i][ex]);
pos.push_back({i, ex});
}
for (int i = ex-1; i >= sx; i--)
{
dq.push_back(table[ey][i]);
pos.push_back({ey, i});
}
for (int i = ey-1; i >= sy+1; i--)
{
dq.push_back(table[i][sx]);
pos.push_back({i, sx});
}
dq.push_front(dq.back());
dq.pop_back();
이후, 기존에 저장한 위치값을 순회하여 데이터를 다시 채워주면 회전이 완료됩니다.
for (int i = 0; i < dq.size(); i++)
{
table[pos[i].first][pos[i].second] = dq[i];
value = min(value, dq[i]);
}
정답 코드
#include <string>
#include <vector>
#include <deque>
#include <iostream>
using namespace std;
vector<int> solution(int rows, int columns, vector<vector<int>> queries) {
vector<int> answer;
vector<vector<int>> table(100, vector<int>(100));
for (int i = 0; i < 100; i++)
for (int j = 0; j < 100; j++)
table[i][j] = i * columns + j+1;
for (auto& querie : queries)
{
auto [sy, sx] = make_pair(querie[0]-1, querie[1]-1);
auto [ey, ex] = make_pair(querie[2]-1, querie[3]-1);
int value = 99999999;
deque<int> dq;
vector<pair<int, int>> pos;
for (int i = sx; i <= ex; i++)
{
dq.push_back(table[sy][i]);
pos.push_back({sy, i});
}
for (int i = sy+1; i <= ey; i++)
{
dq.push_back(table[i][ex]);
pos.push_back({i, ex});
}
for (int i = ex-1; i >= sx; i--)
{
dq.push_back(table[ey][i]);
pos.push_back({ey, i});
}
for (int i = ey-1; i >= sy+1; i--)
{
dq.push_back(table[i][sx]);
pos.push_back({i, sx});
}
dq.push_front(dq.back());
dq.pop_back();
for (int i = 0; i < dq.size(); i++)
{
table[pos[i].first][pos[i].second] = dq[i];
value = min(value, dq[i]);
}
answer.push_back(value);
}
return answer;
}
반응형
LIST
'알고리즘 문제 > 프로그래머스' 카테고리의 다른 글
프로그래머스 숫자의 표현 [Lv. 2] (0) | 2024.12.28 |
---|---|
프로그래머스 미로 탈출 [Lv. 2] (C++) (0) | 2024.12.26 |
프로그래머스 줄 서는 방법 [Lv. 2] (C++) (1) | 2024.11.25 |
프로그래머스 디펜스 게임 [Lv.2] (C++) (1) | 2024.11.23 |
프로그래머스 테이블 해시 함수 [Lv. 2] (C++) (0) | 2024.11.22 |