반응형
해결 방법
단순한 시뮬레이션 문제지만 한 가지 주의할 점이 있다. 그것은 칸에 있는 숫자를 저장하는 변수가 하나 필요하다는 것인데, 칸에 있는 숫자를 기억하지 않고 이동해버리면 값이 덮어 씌워져서 데이터가 날아가버릴 수 있기 때문이다. 그래서 현재의 좌표에 있는 숫자를 저장해뒀다가 다음 칸에 넣을 수 있는 save라는 변수를 하나 추가했다.
그리고 회전의 경우에는 상하좌우 4개의 테두리를 지나는 상황으로 나눠서 반복문을 수행했다. 각 반복문은 각 꼭짓점 사이에서 수행되는 것이다.
소스 코드
#include <vector>
using namespace std;
vector<vector<int>> v;
int rotate(vector<int> query) {
int mini=10001;
int x, y; // 현재 좌표 저장
int save; // 현재 칸에 있는 숫자 저장
int now; // 현재 칸에 있는 숫자 임시 저장
x=query[0]-1;
y=query[1]-1;
save=v[query[0]][query[1]-1];
// 윗 테두리 이동
while(1){
now = v[x][y];
mini=min(mini, now);
v[x][y]=save;
save=now;
if(y==query[3]-1) break;
else y++;
}
// 오른쪽 테두리 이동
x++;
while(1){
now = v[x][y];
mini=min(mini, now);
v[x][y]=save;
save=now;
if(x==query[2]-1) break;
else x++;
}
// 아랫 테두리 이동
y--;
while(1){
now = v[x][y];
mini=min(mini, now);
v[x][y]=save;
save=now;
if(y==query[1]-1) break;
else y--;
}
// 왼쪽 테두리 이동
x--;
while(1){
now = v[x][y];
mini=min(mini, now);
v[x][y]=save;
save=now;
if(x==query[0]-1) break;
else x--;
}
return mini;
}
vector<int> solution(int rows, int columns, vector<vector<int>> queries) {
vector<int> answer;
for(int i=0;i<rows;i++){
vector<int> row;
for(int j=0;j<columns;j++) row.push_back(i*columns+j+1); // 표 생성
v.push_back(row);
}
for(int i=0; i<queries.size(); i++) answer.push_back(rotate(queries[i]));
return answer;
}
테스트케이스 11개 모두 정답
반응형
'Algorithm > 기타 알고리즘' 카테고리의 다른 글
[구간합] 쿠키 구입 - Summer/Winter Coding(~2018) (0) | 2022.05.01 |
---|---|
[시뮬레이션] 스킬트리 - Summer/Winter Coding(~2018) (0) | 2022.04.29 |
[수학] 멀쩡한 사각형 - Summer/Winter Coding(2019) (0) | 2022.04.22 |
[투 포인터] 보석 쇼핑 - 2020 카카오 인턴십 (0) | 2022.03.20 |
[시뮬레이션] 오픈채팅장 - 2019 카카오 블라인드 채용 (0) | 2022.03.05 |
댓글