프로그래밍(c++)/인프런 강의 정리(C++)

강의 내용 정리(Section3_8/달팽이 문제)

정체불명의 모모 2024. 5. 17. 13:56

강의 중 배운 내용과 추가적으로 배워야 할 부분들을 정리한 메모장 입니다.

강의 : (인프런) 게임 프로그래머 입문 올인원 


◇ 달팽이 문제 코드 

#include <iostream>
#include <iomanip>

using namespace std;

const int MAX = 100;
int board[MAX][MAX];
int N;

enum DIR
{
	RIGHT = 0,
	DOWN = 1,
	LEFT= 2,
	UP = 3,
};

void printBoard()
{
	for(int y = 0; y < N ; y++)
    {
    	for(int x = 0; x < N ; x++)
        {
        	// setfill , setw 표현 형식(0을 2개로 나오게 표현)
        	cout << setfill('0') << setw(2) << board[y][x] << " ";
         }
       cout << endl;
     }
}

bool CanGo(int y , int x)
{
   if(y < 0 || y >= N)
      return false;
   if(x < 0 || x >= N)
      return false;
    if(board[y][x] != 0)
      return false;
      
   return true;
}

void SetBoard2()
{
   int dir = RIGHT;
   int num = 1;
   int y = 0;
   int x = 0;
   
   // 방향에 따른 값 변경
   int dy[] = {0,1,0,-1}; // RIGHT , DOWN , LEFT , UP 일 경우 값의 변경
   int dx[] = {1,0,-1,0};
   
   while(true)
   {
   		board[y][x] = num;
        
        // 빠져나가는 조건부 
        if(num == N*N)
        	break;
            
        int nextY = y + dy[dir];
        int nextX = x + dx[dir];
        
        if(CanGo(nextY, nextX))
        {
        	y = nextY;
            x = nextX;
            num++;
         }
         else
         {	// 방향 enum 값 
             dir = (dir + 1) % 4;
         }
     }
 }
 
 int main()
 {
 	cin >> N;
    
    SetBoard();
    printBoard();
 }

 

나중에 참조하기 좋을 듯한 코드여서 따로 포스팅 하였습니다.