문제
풀이
- 현재 채울 칸의 범위를 x1, x2, y1, y2로 설정, 상우하좌의 순서로 해당 칸을 채운다.
- x1의 y1부터 y2
- y2의 x1부터 x2
- x2의 y2부터 y1
- y1의 x2부터 x1
- 현재 칸을 채웠으면 x1, x2, y1, y2를 조절
코드
#include <iostream>
#include <vector>
using namespace std;
vector<vector<int>> solution(int n)
{
vector<vector<int>> answer;
answer.resize(n);
for (auto& v : answer)
{
v.resize(n);
}
int x1 = 0;
int x2 = n - 1;
int y1 = 0;
int y2 = n - 1;
int val = 1;
while (x1 <= x2)
{
for (int y = y1; y <= y2; ++y)
{
answer[x1][y] = val;
val++;
}
for (int x = x1 + 1; x <= x2; ++x)
{
answer[x][y2] = val;
val++;
}
for (int y = y2 - 1; y >= y1; --y)
{
answer[x2][y] = val;
val++;
}
for (int x = x2 - 1; x >= x1 + 1; --x)
{
answer[x][y1] = val;
val++;
}
x1++;
x2--;
y1++;
y2--;
}
return answer;
}
int main(void) {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
solution(5);
return 0;
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][C++][Lv. 3][다익스트라] 합승 택시 요금 (0) | 2024.08.18 |
---|---|
[프로그래머스][C++] 외계어 사전 (0) | 2024.07.21 |