[C++] 프로그래머스 정수를 나선형으로 배치하기
문제설명
양의 정수 n이 매개변수로 주어집니다.
n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터
시계방향 나선형으로 배치한 이차원 배열을
return 하는 solution 함수를 작성해 주세요.
제한사항
• 1 ≤ n ≤ 30
입출력 예
n | result |
---|---|
4 | [[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]] |
5 | [[1, 2, 3, 4, 5], [16, 17, 18, 19, 6], [15, 24, 25, 20, 7], [14, 23, 22, 21, 8], [13, 12, 11, 10, 9]] |
풀이
1부터 n을 제곱한 값까지 n x n 배열에 나선형으로 배치하는 구현 문제입니다.
#include <string>
#include <vector>
using namespace std;
vector<vector<int>> solution(int n) {
vector<vector<int>> answer;
// 0인 2차원 배열 만들기
vector<int> temp;
for(int i = 0; i < n; i++)
{
temp.clear();
answer.push_back(temp);
for(int j = 0; j < n; j++)
{
answer[i].push_back(0);
}
}
// 0을 찾아 채우는 알고리즘
int a = 1;
int i = 0;
int j = 0;
while(a <= n*n)
{
// 오른쪽으로 이동하여 탐색
while(i < n && j < n && answer[i][j] == 0)
{
answer[i][j] = a;
a++;
if ((j + 1) == n)
{
i++;
break;
}
else if(answer[i][j + 1] != 0)
{
i++;
break;
}
else
{
j++;
}
}
// 아래로 이동하여 탐색
while(i < n && j < n && answer[i][j] == 0)
{
answer[i][j] = a;
a++;
if ((i + 1) == n)
{
j--;
break;
}
else if(answer[i + 1][j] != 0)
{
j--;
break;
}
else
{
i++;
}
}
// 왼쪽으로 이동하여 탐색
while(i < n && j < n && j >= 0 && answer[i][j] == 0)
{
answer[i][j] = a;
a++;
if ((j - 1) == -1)
{
i--;
break;
}
else if(answer[j][j - 1] != 0)
{
i--;
break;
}
else
{
j--;
}
}
// 위쪽으로 이동하여 탐색
while(i < n && j < n && i >= 0 && answer[i][j] == 0)
{
answer[i][j] = a;
a++;
if ((i - 1) == -1)
{
j++;
break;
}
else if(answer[i - 1][j] != 0)
{
j++;
break;
}
else
{
i--;
}
}
}
return answer;
}
결과
Leave a comment