Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- const
- winapi
- 백준
- 티스토리챌린지
- C++
- Programmers
- NRVO
- Unreal Engine5
- UnrealEngine4
- C
- 프로그래머스
- baekjoon
- DeferredRendering
- 2294
- algorithm
- 언리얼엔진5
- GeeksForGeeks
- 1563
- UnrealEngine5
- IFileDialog
- RVO
- 줄 세우기
- Frustum
- 팰린드롬 만들기
- softeer
- RootMotion
- UE5
- DirectX11
- 오블완
- directx
Archives
- Today
- Total
Game Develop
[Algorithm] Programmers :: 행렬 테두리 회전하기 본문
https://school.programmers.co.kr/learn/courses/30/lessons/77485
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
55
56
57
58
59
60
61
62
63
|
vector<int> solution(int rows, int columns, vector<vector<int>> queries) {
vector<int> answer;
int row = rows - 1;
int column = columns - 1;
vector<pair<int,int>> dir = { {1,0}, {0,1}, {-1,0}, {0,-1} }; // 시계방향 역순.
vector<vector<int>> matrix(rows, vector<int>(columns, 0));
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < columns; j++)
{
matrix[i][j] = columns * i + j + 1;
}
}
for (int i = 0; i < queries.size(); i++)
{
int startRow = queries[i][0] - 1;
int startCol = queries[i][1] - 1;
int endRow = queries[i][2] - 1;
int endCol = queries[i][3] - 1;
int startNum = matrix[startRow][startCol];
int minNum = startNum;
int curRow = startRow;
int curCol = startCol;
int dirIndex = 0;
vector<int> dirCount = { endRow - startRow , endCol - startCol, endRow - startRow, endCol - startCol };
while (1)
{
if (dirCount[dirIndex] == 0)
{
dirIndex++;
continue;
}
int nextRow = curRow + dir[dirIndex].first;
int nextCol = curCol + dir[dirIndex].second;
if(nextRow == startRow && nextCol == startCol)
{
matrix[curRow][curCol] = startNum;
break;
}
dirCount[dirIndex]--;
matrix[curRow][curCol] = matrix[nextRow][nextCol];
if (matrix[curRow][curCol] < minNum)
{
minNum = matrix[curRow][curCol];
}
curRow = nextRow;
curCol = nextCol;
}
answer.push_back(minNum);
}
return answer;
}
|
cs |
풀고나서 왜 굳이 이렇게 풀었지?라고 생각한 문제다. 아마 바로 직전에 풀었었던 퍼즐채우기문제에 영향을 받은게 아닌가..하는 생각이 든다.
정해진 영역의 테두리만 시계방향으로 한칸씩 옮기고 옮기는 타일중 제일 작은 수를 찾는건데, 회전시키는게 관건이다.
그런데 테두리만 돌리면 되기 때문에 사실 반복문 4번 써서 하면 된다.
나는 역시계방향 순서로, 각 방향마다 움직일수있는 count를 저장해놓고 0이되면 방향을 전환하면서 이동시키는... 식으로 코드를 짰다. 사실 굳이?라는 느낌이긴 한데, 그래도 다른 방식으로 풀어보는것도 좋으니까 그러려니 한다.
'Algorithm > Programmers' 카테고리의 다른 글
[Algorithm] Programmers :: 올바른 괄호 (0) | 2022.08.25 |
---|---|
[Algorithm] Programmers :: 캐시 (0) | 2022.08.25 |
[Algorithm] Programmers :: 퍼즐 조각 채우기 (0) | 2022.07.31 |
[Algorithm] Programmers :: 추석트래픽 (0) | 2022.07.16 |
[Algorithm] Programmers :: 카카오프렌즈 컬러링북 (0) | 2022.07.16 |