[Programmers] 삼각 달팽이
Date:
[Programmers] 삼각 달팽이
Problem URL : 삼각 달팽이
#include <string>
#include <vector>
#include <cstring>
using namespace std;
int map[1000][1000];
int dx[3] = {1,0,-1};
int dy[3] = {0,1,-1};
int N;
bool movable(int x, int y, int dir) {
x = x + dx[dir];
y = y + dy[dir];
if(x < 0 || x >= N || y < 0 || y >= N || map[x][y] != 0) {
return false;
}
return true;
}
void dfs(int x, int y, int count, int dir) {
if(!movable(x,y,dir)){
return; // 첫 움직임부터 못움직이면 끝
}
while(movable(x,y,dir)) {
x = x + dx[dir];
y = y + dy[dir];
map[x][y] = ++count;
}
dir = (dir + 1) % 3; // 반시계 방향으로 회전
dfs(x,y,count,dir);
}
vector<int> solution(int n) {
vector<int> answer;
memset(map,0,sizeof(map));
N = n;
map[0][0] = 1;
dfs(0,0,1,0);
for(int i = 0; i < N; i++) {
for(int j = 0; j <= i; j++) {
answer.push_back(map[i][j]);
}
}
return answer;
}
댓글