PRG 삼각달팽이

도경원·2023년 3월 20일
0

알고리즘스터디_C++

목록 보기
37/42

이미 있는 데이터와 충돌을 할 경우에 방향을 바꿔주는 방식으로 풀었다
처음에는 방향을 전진하고 난 후에 방향전환을 해서 오류가 생겼었다

#include <iostream>
#include <vector>

#define pii pair<int,int>
#define x first
#define y second

using namespace std;

vector<pii> dir = { {-1,-1}, {0,1}, {1,0} };
int map[1001][1001];

vector<int> solution(int n) {

   vector<int> answer;
   if (n == 1) { answer = { 1     }; return answer; }
   if (n == 2) { answer = { 1,2,3 }; return answer; }

   int num = 2 * n;
   int h = n-2;
   int v = n-2;
   int i = 0; //방향인덱스
   


   for (int i = 0; i < n; i++) { //세로가로 초기화
      map[i][0] = i + 1;
      map[n-1][i] = n + i;
   }

   while (true) {
      
      map[v][h] = num++;
      
      if (map[v + dir[i].y][h + dir[i].x] != 0) {
         if (i == 2)i = 0; else i++;
         if (map[v + dir[i].y][h + dir[i].x] != 0)break; //순환한 곳에도 0이 있다면
      }
      h += dir[i].x;
      v += dir[i].y;
   }

   for (int i = 0; i < n; i++){
      for (int j = 0; j < n; j++){
         if (map[i][j] == 0)break;
         answer.push_back(map[i][j]);
      }
   }
   return answer;
}
int main() {
   int n; cin >> n;
   solution(n);

}
profile
DigitalArtDeveloper

0개의 댓글