📄 문제
양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.
📝 풀이
#include <string>
#include <vector>
using namespace std;
vector<vector<int>> solution(int n) {
vector<vector<int>> arr = vector<vector<int>>(n, vector<int>(n, 0));
int dir = 0; // right, bottom, left, top
int cnt = pow(n, 2);
int num = 1;
int row = 0, col = 0;
arr[0][0] = 1;
while(num <= cnt)
{
switch(dir)
{
case 0:
while(col < n - 1 && arr [row][col + 1] == 0)
{
arr[row][col++] = num++;
}
dir = 1;
arr[row][col] = num++;
++row;
break;
case 1:
while(row < n - 1 && arr [row + 1][col] == 0)
{
arr[row++][col] = num++;
}
dir = 2;
arr[row][col] = num++;
--col;
break;
case 2:
while(col >= 1 && arr [row][col - 1] == 0)
{
arr[row][col--] = num++;
}
dir = 3;
arr[row][col] = num++;
--row;
break;
case 3:
while(row >= 1 && arr [row - 1][col] == 0)
{
arr[row--][col] = num++;
}
dir = 0;
arr[row][col] = num++;
++col;
break;
}
}
return arr;
}
- while문 내 switch를 통해 방향을 설정한 후 마지막 또는 값이 설정되지 않은 공간에 도달할때까지 값을 부여합니다.
- 나선형 방향으로 회전하면서 값을 부여합니다.
'algorithms (C++)' 카테고리의 다른 글
[C++][프로그래머스] 한 번만 등장한 문자 (0) | 2023.10.22 |
---|---|
[C++][프로그래머스] OX퀴즈 (1) | 2023.10.22 |
[C++][프로그래머스] 배열의 원소 삭제하기 (0) | 2023.10.22 |
[C++][프로그래머스] 전국 대회 선발 고사 (0) | 2023.10.22 |
[C++][프로그래머스] x 사이의 개수 (0) | 2023.10.22 |