https://programmers.co.kr/learn/courses/30/lessons/77485
예전에 이런 비슷한 문제를 풀어봤었는데 기억이 안나서 조금 헤맸다.
위 그림으로 예를 들어볼 때, query가 (1,1, 4,4)라면 위와 같은 형태로 맵이 회전된다.
나는 값을 '저장할 곳'을 기준으로 잡았고(점 찍어 놓은 곳), 테두리의 위치에 따라 이전 값을 끌어오는 방식으로 진행했다.
tmp라는 공간을 추가로 할당하여, 회전한 결과를 여기에 저장하였고, 쿼리문 하나가 끝나면 이것을 map에 다시 복사하는 방식으로 진행했다. (tmp는 실질적 작업 공간이며, map은 원본 참고용 공간이자 수정한 결과값을 반영하는 공간이다.)
맨 위(top) : y1+1부터 시작하여 y2까지 증가하면서 앞에 값을 끌어온다.(행 좌표 고정)
오른쪽(right) : x1+1부터 시작하여 x2까지 증가하면서 위의 값을 끌어온다.(열 좌표 고정)
아래쪽(bottom) : y2-1부터 시작하여 y1까지 감소하면서 뒤의 값을 끌어온다.(행 좌표 고정)
왼쪽(left) : x2-1부터 시작하여 x1까지 감소하면서 아래의 값을 끌어온다.(열 좌표 고정)
각 for문을 돌때마다 mini 값을 비교하여 회전한 원소들의 최소값을 찾았다.
마지막으로
최솟값을 answer에 추가하고,
tmp의 변경된 결과를 map 에 복사하는 것까지 완성하면 쿼리문 하나를 끝낸 것이다.
코드는 다음과 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(int rows, int columns, vector<vector<int>> queries) {
vector<int> answer;
int i, j, q;
//map, tmp 초기화
vector<vector<int>> map(rows+1, vector<int>(columns+1));
vector<vector<int>> tmp(rows+1, vector<int>(columns+1));//여기에 수정하고, 수정내용을 map에 복사하는 식으로 진행.
for(i=1;i<=rows;i++){
for(j=1;j<=columns;j++){
map[i][j] = (i-1)*columns+j;
tmp[i][j] = (i-1)*columns+j;
}
}
int mini, x1, y1, x2, y2;
for(q=0;q<queries.size();q++){
//x1 행, y1열 ~ x2행, y2열
mini = 2147000000;
x1 = queries[q][0];
y1 = queries[q][1];
x2 = queries[q][2];
y2 = queries[q][3];
//top x: 행, y : 열
for(j = y1+1; j<=y2;j++){
tmp[x1][j] = map[x1][j-1];//앞의 것을 당겨옴
mini = min(tmp[x1][j], mini);
}
//right
for(i = x1+1; i<=x2;i++){
tmp[i][y2] = map[i-1][y2];
mini = min(tmp[i][y2], mini);
}
//bottom
for(j = y2-1; j>=y1; j--){
tmp[x2][j] = map[x2][j+1];
mini = min(tmp[x2][j], mini);
}
//left
for(i= x2-1; i>=x1;i--){
tmp[i][y1] = map[i+1][y1];
mini = min(tmp[i][y1], mini);
}
map = {tmp.begin(), tmp.end()};
answer.push_back(mini);
}
return answer;
}
|
cs |
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 거리두기 확인하기 c++ (1) | 2021.11.12 |
---|---|
프로그래머스 더 맵게 - C++, priority_queue로 min_heap 구성 (0) | 2021.11.11 |
프로그래머스 카카오프렌즈 컬러링북 - C++/ DFS (0) | 2021.11.11 |
프로그래머스 오픈채팅방 - C++, (unordered_map, sstream) (0) | 2021.11.11 |
[C++] 베스트 앨범 (해시 문제) (0) | 2021.11.06 |